В Perl нет специального булевого типа, но, тем не менее, в документации зачастую упоминается, что функция возвращает "булево" значение. Иногда просто написано, что функция возвращает true или false.
Так где же правда?
В Perl нет особенного булевого типа, но любое скалярное значение при проверке с помощью if вернет true или false. Так что можно написать
if ($x eq "foo") {
}
или
if ($x) {
}
первое выражение проверяет, совпадает ли содержимое переменной $x со строкой "foo", а второе проверит, является ли само значение $x истинным.
Какие значения считаются в Perl истинными или ложными?
Это довольно просто. Обратимся к документации:
Число 0, строки '0' и '', пустой список "()" и "undef" считаются ложью в булевом контексте. Все остальные значения считаются истиной. Отрицание истинного значения с помощью "!" или "not" возвращает специальное ложное значение. При использовании в качестве строки оно считается '', а при использовании в качестве числа - 0. Из perlsyn, раздел "Truth and Falsehood".
Таким образом, следующие скалярные значения считаются ложью:
- undef - неопределенное значение
- 0 число 0, даже если вы запишете его как 000 или 0.0
- '' пустая строка.
- '0' строка, содержащая единственное число 0.
Все остальные скалярные значения истинны, включая эти:
- 1 любое число, отличное от нуля
- ' ' строка с одним или больше пробелами
- '00' два или больше 0 в строке
- "0\n" 0 и перевод строки
- 'true'
- 'false' да, даже строка 'false' считается истиной.
Я думаю, это из-за того, что Larry Wall, создатель Perl'а, относится к миру в общем позитивно. Видимо, он считает, что весьма немногие вещи в мире действительно плохие и ложные, а большинство из них - верны.