これは私が見つけた機微ですkeys()
。
$ perl -e 'use warnings; use strict; my $d = { "ab" => 1 }; my @e = keys(%{$d->{cd}});'
$ perl -e 'use warnings; use strict; my $d = { "ab" => 1 }; my %e = %{$d->{cd}};'
Can't use an undefined value as a HASH reference at -e line 1.
最初のスニペットで逆参照エラーが発生しない理由について、私は最も困惑しています。を使用するData::Dumper
と、最初のスニペットで$d->{cd}
、 が autovivified であることが明らかになります{}
。
なぜkeys
autovivify が必要なのですか? を読んでみperldoc
ましたが、満足のいく答えが見つかりませんでした。keys
エイリアス ($_
など) を設定しないので、perl が$d->{cd}
左辺値コンテキストにある必要があると考える必要はありませんね。(ここで説明されているように、式が左辺値コンテキストの自動有効化に含まれている必要があるかどうかは理解しています。
関連する投稿。