我如何访问内联属性?

时间:2011-01-31 12:40:08

标签: perl perl-data-structures

我有一个像这样的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](一个是清楚的,但他是第二个......)?

EDIT2:我很抱歉更改了数据结构,但是给我的定义发生了变化。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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