my @skipper = qw(blue_shirt hat jacket preserver sunscreen);
my @skipper_with_name = ('The Skipper' => \@skipper);
如何理解第二行?
print @skipper_with_name;
得到以下信息:
The SkipperARRAY(0x209cf90)
答案 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'} };