В опкодах в первом случае
7 <1> rv2hv[t2] lK/3 ->8
во втором:
7 <1> rv2hv[t2] lKRM/DREFed,3 ->8
выглядит так, будто для keys() требуется, чтобы аргумент был lvalue.
lvalue из undef автовивифицируется, это факт.
Непонятно мне только, зачем аргументу keys быть lvalue?
19.11.2013, 12:19, "Ilya Chesnokov" <[email protected]>:
2013/11/19 Denis Ibaev <[email protected]>,Привет.
> perl -E 'use strictures; my $v; say(%$v);'
Can't use an undefined value as a HASH reference at -e line 1.
> perl -E 'use strictures; my $v; say(keys(%$v), "ok");'
ok
Почему разыменование переменной со значением undef в хеш не вызывает
ошибки с случае keys() и values()?
Видимо, keys и пр. автовивифицируют $v:perl -Mstrict -E 'my $v; say "keys: ", keys %$v; say "v: ", $v'keys:v: HASH(0x96bde8)> perl -v
This is perl 5, version 14, subversion 2 (v5.14.2) built for
x86_64-linux-gnu-thread-multi
--
Денис Ибаев
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
--
Best regards,
Ilya Chesnokov--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
--
Oleg Alistratov
Oleg Alistratov
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
