При проверке истинности / ложности в выражении вы должны тщательно продумать, что вы на самом деле хотите проверить.
Если у вас есть строка и вам нужно проверить, имеет ли она какое-либо значение, тогдапроверить это:
if (defined $string) { ... }
Если вы возвращаете «логическое» значение из функции или тестируете результат какой-либо внутренней операции, выполните логическую проверку:
if ($value) { ... }
В Perl «истина» зависит от того, как она оценивается.Если вы просто скажете if ($value)
, то единственными значениями string , которые оцениваются как false, являются пустая строка ''
и буквальный ноль '0'
.(Кроме того, любое неопределенное значение является ложным, поэтому, если $value
никогда не присваивается, это также будет ложным.)
Существуют и другие значения, которые могут принимать значение false в числовом контекст, например 0E0
, 0.0000
и строка '0 but true'
.Таким образом, вопрос «что есть истина» действительно зависит от контекста, о котором вы, программист, должны знать.
Внутренне Perl использует ''
для ложного и 1
для правды (например, в качестверезультат любого логического выражения, такого как !$value
).Обычный метод "канонизации" любого значения в одно из этих двух значений - !!$value
- он дважды инвертирует значение, давая вам либо ''
, либо 1
.