3

私はperlが初めてで、perlで書かれたコードを読んでいます。次のような行があります。

$Map{$a}->{$b} = $c{$d};

私はハッシュのように見え、次のよう%samplehashにアクセスすることに精通しています$samplehash{a}="b"

しかし、上記の行は、Map が実際に何であるかについて何を言っているのでしょうか?

4

3 に答える 3

10

これらの変数が与えられた場合:

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ます。

于 2011-12-09T07:40:46.457 に答える
5
$Map{$a}->{$b}

と同等です

${ $Map{$a} }{$b}

のような

$hash{$b}

$Map{$a}の代わりにハッシュ参照のみを使用し%hashます。

ネストされたデータ構造の使用方法に関する覚えやすいルールについては、http://perlmonks.org/ ?node=References+quick+reference を参照してください。

さらに、autovivification がオン (デフォルト) の場合、$Map{$a}存在しないか undef として開始すると、新しいハッシュ リファレンスになるように暗黙的に初期化されます。

于 2011-12-09T10:25:51.320 に答える
1

$Map のキー $a の値は、$b に格納されているキー名を持つ連想配列の参照です。

%Map = ( $a => { $b => $c{$d} }, ...)

于 2011-12-09T07:40:25.397 に答える