Perl Language
Правда и ложь
Поиск…
Синтаксис
- 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