Во втором случае передается lvalue, при обращении к нему и вылетает второе 
предупреждение.
Можно закомментировать строчку с $val и посмотреть.
А значение одно и тоже undef.

Анатолий Гришаев.

26.12.2013, 4:32:27 пользователь Denis Ibaev ([email protected]) написал:

Привет.

Вот такой код

sub foo { my ($val) = @_; }
my %bar;
my $undef;

foo($bar{undef});
foo($bar{$undef});

выдаст на втором вызове функции foo() предупрежд­ения

Use of uninitialized value $undef in hash element
Use of uninitialized value within @_ in list assignment

При этом в первом вызове массив @_ будет содержать один элемент со
значением undef, точнее алиас для $bar{"undef"}. Во втором же так же
будет один элемент и как будто undef, но, судя по предупрежд­ению, не
совсем он. Похоже, что алиас на неопределё­нный элемент %bar. В чём же
разница этих вызовов и для чего?

--
Денис Ибаев
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org


--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить