2011-01-31 51 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