Поиск…


Синтаксис

  • undef # False
  • '# Определено, False
  • 0 # Определено, имеет длину, ложь
  • '0' # Определено, имеет длину, ложь

замечания

Perl не имеет логического типа данных и не имеет никаких true и false ключевых слов, как многие другие языки. Однако каждое скалярное значение будет оцениваться как истинное или ложное при оценке в булевом контексте (например, условие в случае if или цикл while).

Следующие значения считаются ложными:

  • '' , пустая строка. Это то, что возвращают встроенные операторы сравнения (например, 0 == 1 )
  • 0 , число 0, даже если вы пишете его как 000 или 0.0
  • '0' , строка, содержащая одну цифру 0
  • undef , неопределенное значение
  • Объекты, которые используют перегрузку для нумерации / стягивания в ложные значения, такие как JSON::false

Все остальные значения верны:

  • любое ненулевое число, такое как 1 , 3.14 , 'NaN' или 'Inf'
  • любая строка, численная 0, но не буквально строка '0' , такая как '00' , '0e0' , "0\n" и "abc" .
    Если вы намеренно возвращаете истинное числовое значение 0, предпочитаете '0E0' (используется известными модулями) или '0 but true' (используется функциями Perl)
  • любая другая строка, которая не является пустой, например, ' ' , 'false'
  • все ссылки, даже если они ссылаются на ложные значения, такие как \'' , [] или {}
  • массив или хэш ложных значений

Следующие операторы обычно обрабатываются для возврата булевского в скалярном контексте:

  • @a возвращает ли массив пустым или нет

  • %h возвращает ли хэш пустой или нет

  • grep возвращает ли найденные совпадающие элементы или нет

  • @a = LIST и (LIST) = LIST возвращать, будет ли в правой стороне СПИСИЛИТЬ любые скаляры или нет

Список истинных и ложных значений

use feature qw( say );

# Numbers are true if they're not equal to 0.
say 0             ? 'true' : 'false'; # false
say 1             ? 'true' : 'false'; # true
say 2             ? 'true' : 'false'; # true
say -1            ? 'true' : 'false'; # true
say 1-1           ? 'true' : 'false'; # false
say 0e7           ? 'true' : 'false'; # false
say -0.00         ? 'true' : 'false'; # false

# Strings are true if they're not empty.
say 'a'           ? 'true' : 'false'; # true
say 'false'       ? 'true' : 'false'; # true
say ''            ? 'true' : 'false'; # false

# Even if a string would be treated as 0 in numeric context, it's true if nonempty.
# The only exception is the string "0", which is false.
# To force numeric context add 0 to the string
say '0'           ? 'true' : 'false'; # false
say '0.0'         ? 'true' : 'false'; # true
say '0e0'         ? 'true' : 'false'; # true
say '0 but true'  ? 'true' : 'false'; # true
say '0 whargarbl' ? 'true' : 'false'; # true
say 0+'0 argarbl' ? 'true' : 'false'; # false

# Things that become numbers in scalar context are treated as numbers.
my @c = ();
my @d = (0);
say @c            ? 'true' : 'false'; # false
say @d            ? 'true' : 'false'; # true

# Anything undefined is false.
say undef         ? 'true' : 'false'; # false

# References are always true, even if they point at something false
my @c = ();
my $d = 0;
say \@c            ? 'true' : 'false'; # true
say \$d            ? 'true' : 'false'; # true
say \0             ? 'true' : 'false'; # true
say \''            ? 'true' : 'false'; # true


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow