Operadores lógicos e de comparação

Antes de introduzirmos os operadores correspondentes em Perl, aqui veremos o básico de álgebra Booleana.

Álgebra Booleana é uma variação da álgebra onde em vez de números temos valores de 'verdade' 0 e 1, onde 1 é chamado verdadeiro e 0 é chamado falso.

Como na álgebra tradicional há operadores como +, *, etc. Os mais básicos são chamados NÃO, E e OU. Como já te contamos, na álgebra Booleana os valores só podem ser Verdadeiro e Falso. Isso significa que eles não só podem ser usados em diferentes operações, como o resultado dessas operações é sempre Verdadeiro ou Falso. Vejamos como isso funciona.

Verdadeiro e Falso

Não existem valores reservados para Verdadeiro e Falso em Perl. Em Perl, Verdadeiro é tudo que não é Falso, onde Falso é tudo que é convertido para 0: o próprio 0, '' (string vazia) e a palavra reservada undef, por exemplo, que indica valores não definidos.

NÃO (NOT)

O operador NÃO é um operador unário, o que significa que ele opera em um único valor. Em Perl, o operador NÃO é o símbolo !. A tabela-verdade do NÃO:

x !x
0 1
1 0

Vejamos o resultado desse operador em diferentes valores. No exemplo a seguir adicionamos 0 para valores Falsos para que eles não sejam convertidos em uma string vazia pela função say.

say !0;
say !1 + 0;
say !'string that converts to 1' + 0;
say !'';

E (AND)

O operador E é um operador binário, ou seja, que opera em dois valores. Em Perl, o operador E é o símbolo &&. A tabela-verdade do E:

x y &&
0 0 0
1 0 0
0 1 0
1 1 1

Vejamos qual o resultado obtido ao usar esse operador em diferentes valores. No exemplo a seguir adicionamos 0 a valores Falsos para que eles não sejam convertidos em strings vazias pela função say.

say 1 && 1;
say 0 && 1;
say 0 && 0;
say 'string' && 1;

OU (OR)

O operador OU também é um operador binário, ou seja, também opera em dois valores. Em Perl, o operador OU é o símbolo ||. A tabela-verdade do OU:

x y ||
0 0 0
1 0 1
0 1 1
1 1 1

Vejamos qual o resultado de usar esse operador em diferentes valores. No exemplo a seguir nós adicionamos 0 a valores Falsos para que não sejam convertidos em strings vazias pela função say.

say 1 || 1;
say 0 || 1;
say 0 || 0;
say 'string' || 0;

Prioridade

Assim como na álgebra tradicional, na álgebra Booleana os operadores possuem diferentes prioridades, ou seja, alguns são avaliados antes de outros. A ordem dos operadores Booleanos é:

! && ||

Combinações

NÃO, E e OU podem ser combinados em uma única expressão. Você também pode usar parênteses para mudar a ordem das avaliações:

say (1 || 0) && 1

Exercício

Corrija a declaração abaixo introduzindo parênteses para que a operação exiba a string vazia em vez de 1.

say  !1 || 1 && 1

Operadores de comparação

Operadores de comparação também retornam Verdadeiro e Falso, mas são usados com números e string. Como o Perl não diferencia números e strings, existem grupos de comparação diferentes para números e strings.

==!=<<=>>=
eqneltlegtge

Vamos tentar esse exemplo:

say 1 == 1;
say 10 > 2;
say 3 <= 3;

say 'foo' ne 'bar';