私はperlが初めてで、perlで書かれたコードを読んでいます。次のような行があります。
$Map{$a}->{$b} = $c{$d};
私はハッシュのように見え、次のよう%samplehash
にアクセスすることに精通しています$samplehash{a}="b"
しかし、上記の行は、Map が実際に何であるかについて何を言っているのでしょうか?
私はperlが初めてで、perlで書かれたコードを読んでいます。次のような行があります。
$Map{$a}->{$b} = $c{$d};
私はハッシュのように見え、次のよう%samplehash
にアクセスすることに精通しています$samplehash{a}="b"
しかし、上記の行は、Map が実際に何であるかについて何を言っているのでしょうか?
これらの変数が与えられた場合:
my $a = "apples";
my $b = "pears";
my %c = ("bananas" => 2);
my $d = "bananas";
my %Map;
課題
$Map{$a}->{$b} = $c{$d};
ハッシュは次のようになります。
%Map = (
"apples" => {
"pears" => 2
}
);
%Map
はハッシュであり、割り当て後に autovivification によってハッシュ ref が含まれます: まだそこにない場合は、ハッシュ内の要素$Map{$a}->{$b}
にアクセスすることにより、内部ハッシュ ref が Perl によって自動的に作成され%Map
ます。
$Map{$a}->{$b}
と同等です
${ $Map{$a} }{$b}
のような
$hash{$b}
$Map{$a}
の代わりにハッシュ参照のみを使用し%hash
ます。
ネストされたデータ構造の使用方法に関する覚えやすいルールについては、http://perlmonks.org/ ?node=References+quick+reference を参照してください。
さらに、autovivification がオン (デフォルト) の場合、$Map{$a}
存在しないか undef として開始すると、新しいハッシュ リファレンスになるように暗黙的に初期化されます。
$Map のキー $a の値は、$b に格納されているキー名を持つ連想配列の参照です。
%Map = ( $a => { $b => $c{$d} }, ...)