Но только во втором случае обращение в lvalue приводит undef к пустой строке,
что
и вызывает uninitialized warning
а в случае foo($bar{+undef});
подозреваю перевод undef в пустую строку сделано на этапе компиляции, поэтому
варнинг и не выскакивает
Анатолий Гришаев.
26.12.2013, 12:15:02 пользователь Alexander Onokhov ([email protected])
написал:
lvalue, присваивание которому автовивифицирует элемент хеша в обоих случаях
передаётся.
2013/12/26 Анатолий Гришаев <[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
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
--
Alexander
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org