Это не объясняет, почему во втором вызове примера есть предупреждение: "Use of uninitialized value within @_ in list assignment", а в первом вызове нету
Алиас несуществующего значения на несуществующем ключе и в первом и во втором случае передаётся. Загадка 2013/12/26 Динар Жамалиев <[email protected]> > Добрый день. > Думаю дело обстоит так: > > # 1) > # вызов foo($_{+undef}) генерирует варнинг 'Use of uninitialized value in > hash element' > # потому что в массив @_ вносится алиас несуществующего значения > # 2) > # команда $_ = $_[0] копирует уже само значение, а его не существует, > # генерируется варнинг Use of uninitialized value in scalar assignment > # > use strict; use warnings; > foo($_{+undef}); > sub foo { $_ = $_[0] } > > > > 26 декабря 2013 г., 8:58 пользователь Nikita Zubkov > <[email protected]>написал: > > Ключ хэша всегда строка. $bar{undef} это то же самое что и $bar{"undef"}. >> То же самое касается >> >> my $h = { undef => 1 }; >> >> >> >> >> >> 26 декабря 2013 г., 6:31 пользователь 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 >>> >> >> >> >> -- >> Regards, >> Nikita Zubkov. >> >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org >> >> > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > > -- Alexander
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
