Ви часто бачите перевірку на визначеність, тому вам не доведеться мати справу з попередженням про використання значення undef (а в Perl 5.10 воно повідомляє вам про змінну, що порушує):
Use of uninitialized value $name in ...
Отже, щоб обійти це попередження, люди придумують всілякі коди, і цей код починає виглядати як важлива частина рішення, а не як жувальна гумка та клейка стрічка. Іноді краще показати, що ви робите, явно вимкнувши попередження, якого ви намагаєтеся уникати:
{
no warnings 'uninitialized';
if( length $name ) {
...
}
}
В інших випадках використовуйте якесь нульове значення замість даних. За допомогою оператора визначеного або Perl 5.10 ви можете вказати length
явний порожній рядок (визначений і повернути нульову довжину) замість змінної, яка ініціюватиме попередження:
use 5.010;
if( length( $name // '' ) ) {
...
}
У Perl 5.12 це трохи простіше, оскільки length
для невизначеного значення також повертається undefined . Це може здатися трохи глупотою, але це радує математика, яким я, можливо, хотів би стати. Це не видає попередження, тому це питання існує.
use 5.012;
use warnings;
my $name;
if( length $name ) {
...
}
length undef
вертає undef, замість попередження та повертає 0. У логічному контексті undef так само хибний, як 0, тому якщо ви націлюєтесь на версію v5.12 або пізнішу, ви можете просто написатиif (length $name) { ... }