Вы часто видите проверку на определенность, поэтому вам не нужно иметь дело с предупреждением об использовании значения undef (а в Perl 5.10 он сообщает вам ошибочную переменную):
Use of uninitialized value $name in ...
Итак, чтобы обойти это предупреждение, люди придумывают всевозможные коды, и этот код начинает выглядеть как важная часть решения, а не как жевательная резинка и клейкая лента. Иногда лучше показать, что вы делаете, явно отключив предупреждение, которого вы пытаетесь избежать:
{
no warnings 'uninitialized';
if( length $name ) {
...
}
}
В других случаях используйте какое-то нулевое значение вместо данных. С помощью оператора defined-or Perl 5.10 вы можете указать length
явную пустую строку (определенную и вернуть нулевую длину) вместо переменной, которая вызовет предупреждение:
use 5.010;
if( length( $name // '' ) ) {
...
}
В Perl 5.12 это немного проще, потому length
что значение undefined также возвращает undefined . Это может показаться немного глупым, но это нравится математику, которым я, возможно, хотел бы быть. Это не вызывает предупреждения, поэтому этот вопрос существует.
use 5.012;
use warnings;
my $name;
if( length $name ) {
...
}
length undef
возвращается undef вместо предупреждения и возврата 0. В логическом контексте undef так же ложно, как и 0, поэтому, если вы ориентируетесь на версию 5.12 или новее, вы можете просто написатьif (length $name) { ... }