3

Perl の複雑な構造について質問があります

my $data1 = [
  +{ id => 1, name => 'A' },
  +{ id => 2, name => 'B' },
  +{ id => 3, name => 'C' },
];

my $data3 = +{
   1 => +{ id => 1, name => 'A' },
   2 => +{ id => 2, name => 'B' },
   3 => +{ id => 3, name => 'C' },
};

「B」はどのように印刷すればよいですか?それはどのようなデータ構造ですか?また、Perl のネストされた構造 (ハッシュ参照、配列参照など) に関するわかりやすい参照はありますか?

前もって感謝します

4

1 に答える 1

6

これをやってみてください:

print $data1->[1]->{name}; # ARRAY ref
print $data3->{2}->{name}; # HASH ref

これは、perl ARRAY および HASH ref からの逆参照です。

明示的に-> 逆参照します。最初の「フロア」にのみ必要です。例:

print $data1->[1]{name};
print $data3->{2}{name};

あまりにも動作します。2番目以降はオプションです。

Chris Charley が言ったように、データ構造に関するチュートリアルを見てください。


スカラー参照がどのように見えるかを理解するのを助けるために、Data::Dumperを使用してください。例:

print Dumper $data1;
print Dumper $data3;

出力する必要があります:

$VAR1 = [
          {
            'name' => 'A',
            'id' => 1
          },
          {
            'name' => 'B',
            'id' => 2
          },
          {
            'name' => 'C',
            'id' => 3
          }
        ];
$VAR1 = {
          '1' => {
                   'name' => 'A',
                   'id' => 1
                 },
          '3' => {
                   'name' => 'C',
                   'id' => 3
                 },
          '2' => {
                   'name' => 'B',
                   'id' => 2
                 }
        };

+{ }構文については、 rraは適切な応答を返します。

中かっこが匿名のハッシュ参照ではなくコード ブロックであると見なされる場所のあいまいさを解消しますが、それが必要になることはめったにありません。コードには、あいまいになる可能性のある場所と明確で一貫性を持たせたいという誤った欲求から、それらが含まれていると推測しています。

于 2013-03-21T00:15:54.337 に答える