[Moscow.pm] Неопределённое значение, но не undef
Анатолий Гришаев
0body0 на rambler.ru
Чт Дек 26 00:32:10 PST 2013
Только, что заметил, что
foo($bar{+undef});
foo($bar{$undef});
обрабатываются одинаково.
Анатолий Гришаев.
26.12.2013, 12:25:39 пользователь Анатолий Гришаев (0body0 на rambler.ru)
написал:
Но только во втором случае обращение в lvalue приводит undef к пустой строке,
что и вызывает uninitialized warning
а в случае foo($bar{+undef});
подозреваю перевод undef в пустую строку сделано на этапе компиляции, поэтому
варнинг и не выскакивает
Анатолий Гришаев.
26.12.2013, 12:15:02 пользователь Alexander Onokhov (ccnweb на gmail.com)
написал:
lvalue, присваивание которому автовивифицирует элемент хеша в обоих
случаях передаётся.
2013/12/26 Анатолий Гришаев <0body0 на rambler.ru>
Во втором случае передается lvalue, при обращении к нему и вылетает
второе предупреждение.
Можно закомментировать строчку с $val и посмотреть.
А значение одно и тоже undef.
Анатолий Гришаев.
26.12.2013, 4:32:27 пользователь Denis Ibaev (dionys на gmail.com)
написал:
Привет.
Вот такой код
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
moscow-pm на pm.org | http://moscow.pm.org
--
Moscow.pm mailing list
moscow-pm на pm.org | http://moscow.pm.org
--
Alexander
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20131226/fa4879b1/attachment.html>
Подробная информация о списке рассылки Moscow-pm