В 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'а, относится к миру в общем позитивно. Видимо, он считает, что весьма немногие вещи в мире действительно плохие и ложные, а большинство из них - верны.