如何在perl中理解这一点

时间:2013-04-19 08:27:06

标签: perl

my @skipper = qw(blue_shirt hat jacket preserver sunscreen);
my @skipper_with_name = ('The Skipper' => \@skipper);

如何理解第二行?

print @skipper_with_name;

得到以下信息:

The SkipperARRAY(0x209cf90)

3 个答案:

答案 0 :(得分:3)

@skipper前面的反斜杠获取对数组的引用。

如果您:

,您可以看到实际结构
use Data::Dumper;
print Dumper \@skipper_with_name;

也许你想要第二个数组的哈希,这意味着The Skipper可以用作访问@skipper的密钥:

my %skipper_with_name = ('The Skipper' => \@skipper);
print Dumper \%skipper_with_name;
my @skipper_copy = @{$skipper_with_name{'The Skipper'}};

请注意我是如何使用@{...}取消引用数组引用的。

答案 1 :(得分:2)

正如Stevenl所提到的,Data::Dumper只打印出数组或散列的结构,如果你将引用传递给它,而不是结构本身。否则,它会打印结构(ARRAY)及其内存地址。

此外,如果您希望@skipper_with_name成为HASH而不是ARRAY,我会指出@仅用于数组,{{1 }}是%的符号(因此它将是HASH)。此外,尽管%skipper_with_name最常用于散列中以显示键/值关系,但它基本上只是一个逗号,因此可以无错误地使用来创建数组。

=>

与:

相同
my @skipper_with_name = ('The Skipper' => \@skipper);
你可以在这里看到:

my @skipper_with_name = ('The Skipper',  \@skipper);

答案 2 :(得分:1)

这是一个新的Array,它有一个引用(数组\前面的斜杠)到存储在其中的初始数组。如果你打印它,你只获得内存地址,你需要先取消引用它,再次前面加@符号来获取哈希的内容。

然而这没有任何意义,Arrays只能有数字indixes。您可能想要做的是使用哈希。

my %skipper_with_name = ('The Skipper' => \@skipper);

现在您可以通过'The Skipper'标识符引用该数组。

print Dumper $skipper_with_name{'The Skipper'};
#or
print @{ $skipper_with_name{'The Skipper'} };