Так в первом случае тоже передаётся lvalue, мы же можем изменить значение в хеше изнутри функции. При этом во втором случае будет создан ключ из пустой строки.
26 декабря 2013 г., 12:04 пользователь Анатолий Гришаев <[email protected]> написал: > Во втором случае передается 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
