8

これは私が見つけた機微です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 であることが明らかになります{}

なぜkeysautovivify が必要なのですか? を読んでみperldocましたが、満足のいく答えが見つかりませんでした。keysエイリアス ($_など) を設定しないので、perl が$d->{cd}左辺値コンテキストにある必要があると考える必要はありませんね。(ここで説明されているように、式が左辺値コンテキストの自動有効化に含まれている必要があるかどうかは理解しています。

関連する投稿

4

2 に答える 2

4

キーは実際に左辺値にすることができることに注意してください (ハッシュの予想される要素数を設定します)。

ただし、キー自体が左辺値コンテキストで使用されていない場合でも、ハッシュの反復子をリセットするという副作用があります。

したがって、ハッシュを変更して、逆参照に左辺値コンテキストを与え、自動有効化します。

于 2016-01-27T07:30:51.343 に答える