O Perl ainda não possui um tipo especial booleano, na documentação do Perl você pode ocasionalmente observar que uma função retorna valor "booleano". As vezes a documentação a documentação diz que a função retorna valor verdadeiro ou falso. Então, qual deles é verdade?

O Perl não possui um tipo específico para valores booleanos, entretanto todo valor escalar - se verificado utilizando if irá retornar verdadeiro ou falso. Então, dessa forma você pode escrever:

if ($x eq "foo") {
}

e você também pode escrever

if ($x) {
}

No primeiro caso será avaliado se o conteúdo da variável $x é o mesmo que o texto "foo", enquanto que no segundo caso será avaliado se a própria variável $x é verdadeira ou falsa.

Quais valores são verdadeiros ou falsos em Perl?

É uma questão bem simples. Permita-me citar a documentação:

O número 0, os textos '0' e '', a lista vazia "()" e o "undef" são todos considerados falsos
em contexto booleano. Todos os demais casos são considerados verdadeiros.
A negação de um valor verdadeiro por "!" ou "not" retornará um tipo especial de valor falso.
Quando avaliado como texto, será tratado como '', e quando avaliado como número serpa tratado como 0.

Retirado do perlsyn, da seção "Truth and Falsehood".

Então os seguintes valores escalares são considerados falsos:

  • undef - o valor não definido.
  • 0 o número 0, mesmo quando escrito como 000 ou 0.0.
  • '' o texto vazio.
  • '0' o texto que contém um único dígito 0.

Todas os demais valores escalares são verdadeiros, incluindo o seguintes:

  • 1 qualquer número diferente de 0.
  • ' ' o texto contendo apenas um espaço.
  • '00' dois ou mais caracteres em um texto.
  • "0\n" um 0 seguido de um caracter de nova linha.
  • 'verdade'
  • 'falso' sim, até mesmo o texto 'falso' é avaliado como verdadeiro.

Eu acredito que as coisas funcionam dessa forma porque o Larry Wall, criador do Perl possui de forma geral uma visão positiva do mundo. Ele provavelmente acredita que existem poucas coisas ruins e falsas no mundo. A maioria das coisas é verdadeira.