2011-01-31 54 views
1

我有一個像這樣的perl變量。 我如何訪問內嵌屬性(如'706')?我如何訪問內嵌屬性?

my @config = [ 
     { 
     'x' => [ 565, 706 ], 
     'y' => [ 122 ], 
     'z' => 34, 
     'za' => 59, 
    } 
]; 

編輯:print Dumper($config[0]);產量:$VAR1 = undef;

貌似我得到使用$config[0][0]->{x}[1];存取權限。爲什麼我必須使用[0] [0](一個清楚,但他秒...)?

編輯2:我很抱歉改變數據結構,但給我的定義改變了。

+0

不知道的是,逗號後`59`真的是正確的。 – Benoit 2011-01-31 13:04:17

+0

沒有逗號似乎沒有問題 – Thariama 2011-01-31 13:08:59

+2

關於Perl的好處之一是關閉逗號是可選的。這意味着您可以將其保留在那裏,而無需擔心在需要添加更多項目時添加它。 – 2011-01-31 13:11:14

回答

3

[編輯:按照轉換問題的定義。]

考慮:

my @config = ( 
    [ 
    { # NB: insertion order ≠ traversal order 
     "x" => [ 565, 706 ], 
     "y" => [ 122 ], 
     "z" => 34, 
     "za" => 59, 
    }, 
    ], 
); 

那麼這將做到這一點:當然

# choice §1 
print $config[0][0]{"x"}[-1]; # get 1ˢᵗ row’s xᵗʰ row’s last element 

瞭解,這是單純的語法糖:

# choice §2 
print $config[0]->[0]->{"x"}->[-1]; # get 1ˢᵗ row’s xᵗʰ row’s last element 

那就是隻是語法糖:

# choice §3 
print ${ $config[0] }[0]->{"x"}->[-1]; # get 1ˢᵗ row’s xᵗʰ row’s last element 

這又只是語法糖:

# choice §4 
print ${ ${ $config[0] }[0] }{"x"}->[-1]; # get 1ˢᵗ row’s xᵗʰ row’s last element 

這再次是語法糖:

# choice §5 
print ${ ${ ${ $config[0] }[0] }{"x"}}[-1]; # get 1ˢᵗ row’s xᵗʰ row’s last element 

並且,當然,相當於:

# choice §6 
print ${ ${ ${ $config[0] }[0] }{"x"} }[ $#{ ${ ${ $config[0] }[0] }{"x"} } ]; # get 1ˢᵗ row’s xᵗʰ row’s last element 
4

你的變量等效於:

my $config = [ 
    'x', [ 565, 706 ], 
    'y', [ 122 ], 
    'z', 34, 
    'za', 59, 
]; 

所以,如果你想獲得的706,你可以這樣做:

print $config->[1][1]; 

按照問題

新數據更新

有了更新的問題,您現在可以訪問:

say $config->[0]{x}[1]; 

根據新的數據結構

根據您提供的最新更新數據結構的新更新:包含本身的哈希{

my @config = [ 
     { 
     'x' => [ 565, 706 ], 
     'y' => [ 122 ], 
     'z' => 34, 
     'za' => 59, 
    } 
]; 

您分配一個匿名數組[...] ...} 到數組@config,這將填充@config 與匿名數組的第一個元素

say Dumper \@config; 

$VAR1 = [ 
      [ 
      { 
       'y' => [ 
         122 
        ], 
       'za' => 59, 
       'x' => [ 
         565, 
         706 
        ], 
       'z' => 34 
      } 
      ] 
     ]; 
say $config[0][0]{x}[1]; #prints 706 

我想你想做的事之一:

my $config = [ 
     { 
     'x' => [ 565, 706 ], 
     'y' => [ 122 ], 
     'z' => 34, 
     'za' => 59, 
    } 
]; 
say $config->[0]{x}[1]; #prints 706 



my @config = (
     { 
     'x' => [ 565, 706 ], 
     'y' => [ 122 ], 
     'z' => 34, 
     'za' => 59, 
    } 
); 
say $config[0]{x}[1]; #prints 706