3

私はPerlのほとんど初心者です。したがって、ネストされたハッシュの値にアクセスする2つの方法の違いについて疑問に思っています。

次のハッシュについて考えてみます。

my %hsh = ( 
    'fruits' => { 
        'red'    => 'apple', 
        'yellow' => 'banana', 
    },
    'veg' => {
        'red'    => 'capcicum',
        'yellow' => 'lemon',
    },
);

#way 1
print $hsh{'fruits'}{'red'}; 

#way 2
print $hsh{'fruits'}->{'red'};

どちらも同じ出力appleです。しかし、これら2つの方法の違いは何ですか?

4

3 に答える 3

3

演算子は、->ハッシュまたは配列参照を逆参照するために使用されます。あなたの場合、Perlは多次元データ構造を扱うときに参照解除を想定しているため、これは必要ありません。ただし、それ以外の場合は、次のことが必要です。

my $ref = [ 'a','b','c' ];

print $ref[0];    #Fails
print $ref->[0];  #Succeeds
于 2012-09-21T15:02:39.560 に答える
1

違いはありません。Perlの哲学は「それを行うには複数の方法がある」です。

これ->は単なる明示的な逆参照です。それを省略すると、Perlは通常あなたが何を意味するかを知っています。ネストが大きく、明示的に保持したい場合があります。

私の投稿を編集するのは明確ではありませんでした。この場合、Perlはあなたが何を意味するかを知っていますが、@ cHaoが指摘したように、そうでない場合があります。

于 2012-09-21T15:01:02.227 に答える
0

->間接参照演算子です。ハッシュではなく、ハッシュ参照で使用されます。ハッシュ参照は、ハッシュデータのコピーの作成を回避するために使用されます。これにより、CPUとメモリの使用量が削減されます。

ハッシュ

ハッシュの作成:

my %hash = ('red' => 'apple');

また

my %hash = %$hashref;

を使用したアクセス:

print $hash{'red'};

Hashrefs

hashrefの作成:

my $hashref = { 'red' => 'apple' };

また

my $hashref = \%hash;

を使用したアクセス:

print $hashref->{'red'};
于 2012-09-21T15:01:59.903 に答える