2013-03-21 91 views
2

我有一個關於在PerlPerl的嵌套結構

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引用的嵌套結構(哈希引用,數組引用等),這些引用是可以理解的嗎?

預先感謝您

+1

您是否知道Data :: Dumper? – 2013-03-21 00:14:25

+0

是的,但我試圖做到這一點,而不使用模塊 – ado 2013-03-21 00:14:55

+0

我知道,當它的一個$ data1 = [[1,'a']]我們可以解引用它並打印它與「print $ data1 - > [1] [1 ];」簡單的線條,但我從未在 – ado 2013-03-21 00:16:12

回答

6

試着這樣做:

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

這是去參考從一個Perl數組和散列REF。

->明確地去引用。這只是第一個「地板」所需要的,例如:

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

也可以。第二和更多是可選項。

像克里斯·查理說,看看到tutorial on data structures


爲了幫助您瞭解您的標量裁判的樣子,用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提供了一個很好的迴應:

消歧在大括號可以被認爲是一個代碼塊,而不是一個匿名散列引用的地方,但一個很少需要這一點。我猜測代碼包含了他們的錯誤願望,希望清楚並且與可能不明確的地方一致。

+0

非常感謝!它現在確實打印出來了,並且通過你給出的答案我以某種方式瞭解了這些東西是什麼樣的東西 – ado 2013-03-21 00:19:36

+0

很高興幫助你=) – 2013-03-21 00:20:11

+2

請注意,你並不總是必須明確解除引用。在第一個' - >'之後,使用更多的引用是可選的 - '$ data1 - > [1] {name}'等效於'$ data1 - > [1] - > {name}'。 – 2013-03-21 09:56:54