Re: undef ÎÁÓÞÅÔ ×ÓÅÇÏ

Greg Belenky greg на webzavod.ru
Сб Сен 27 18:49:14 CDT 2003


@a в скалярном контексте интерпретируется как число элементов массива. т.к.
число элементов не может быть неопределенным числом, зато может быть
нулевым, то выражение defined @a _всегда_ истино.

> @a=("undef");
> #@a=(1);

эти 2 присваивания - примерно из одной оперы... строка "undef" это вполне
определенное значение.

> if (defined @a) { print "aaa!"; };
> печатает aaa! несмотря ни на что. хоть @a=undef, @a=(undef), @a=(1) ....

см. в начале ответа.

> usr Net::Nslookup;
> @ns=nslookup(...)
>
> в цикле оно может возвратить список (вероятно, из одного элемента, но
иногда
> и больше), или вообще ничего не возвратить.
> если дальше делать, допустим, split на каждое значение из @ns, то если не
> было ничего возвращено, то идет ругань на использование
> неинициализированных значений.

foreach my $name (@ns) {
  next unless defined $name;
  ...
}

--
Григорий "Grishace" Беленький
http://search.cpan.org/author/GRISHACE/





Подробная информация о списке рассылки Samara-pm