带有哈希引用的Perl数组引用

时间:2015-06-16 11:12:55

标签: perl

my $var1=[{'a'=>'1','b'=>'2'},1];

print @$var1[0]->{a};

它将打印1

但是,如果我打印如下:

print @$var1->{a};

它会打印如下错误

Can't use an undefined value as a HASH reference;

任何人都可以解释两个print语句之间的差异吗?

3 个答案:

答案 0 :(得分:4)

@$var1[0]->{a}

通常写成

$var1->[0]{a}

第二种语法不同。

@$var1->{a}

相当于

@{$var1}->{a};

您不能将数组(@{$var1})取消引用为哈希。另一个问题是为什么报告undef,我不知道答案。

答案 1 :(得分:0)

在第一个声明中,您打印了键的值' a'数组中的第一个元素($ var1) 在第二个声明中,您打印了键的值' a'您的数组(并且因为数组没有键而得到错误)

希望这有帮助

答案 2 :(得分:0)

my $var1=[{'a'=>'1','b'=>'2'},1];

$ var1是数组引用,它包含索引0处的哈希引用和索引1处的标量

将$ var1引入数组,我们必须使用@ $ var1。(它给出了2元素数组) 为了访问单个元素,我们必须使用$$ var1 [0]或$ var1-> [0]。

$ var1-> [0]再次是哈希引用。 要取消它,我们必须使用$ var1-> [0] {'a'}。

但声明“@ $ var1-> {'a'}”无效,因为

  1. 散列引用出现在数组“@ $ var1”的0索引处。
  2. 所有引用都是标量,Array不能用于引用哈希引用。
  3. 有关详细信息,请参阅

    1. Perl Data Structures Cookbook
    2. Bless my Referents