my @skipper = qw(blue_shirt hat jacket preserver sunscreen);
my @skipper_with_name = ('The Skipper' => \@skipper);
如何理解第二行?
print @skipper_with_name;
得到以下消息:
The SkipperARRAY(0x209cf90)
my @skipper = qw(blue_shirt hat jacket preserver sunscreen);
my @skipper_with_name = ('The Skipper' => \@skipper);
如何理解第二行?
print @skipper_with_name;
得到以下消息:
The SkipperARRAY(0x209cf90)
前面的反斜杠@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'}};
请注意我过去是如何@{...}
取消引用数组引用的。
正如 Stevenl 所提到Data::Dumper
的,如果您将引用传递给它,则只打印出数组或哈希的结构,而不是结构本身。否则它会打印出结构是什么(ARRAY)
以及它的内存地址。
另外,如果您希望@skipper_with_name
是 aHASH
而不是 a ARRAY
,我会指出@
仅用于数组,%
是 a 的符号HASH
(所以它会是%skipper_with_name
)。此外,虽然=>
在哈希中最常用于显示键/值关系,但它本质上只是一个逗号,因此可以毫无错误地用于创建数组。
my @skipper_with_name = ('The Skipper' => \@skipper);
是相同的:
my @skipper_with_name = ('The Skipper', \@skipper);
你可以在这里看到:
$skipper_with_name[0] = 'The Skipper'
$skipper_with_name[1] = \@skipper
\
它是一个新的 Array,它具有对存储在其中的初始数组的引用(数组前面的斜线)。如果你打印它,你只会得到内存地址,你需要首先通过再次添加@
符号来取消引用它以获取哈希的内容。
然而这没有任何意义,数组只能有数字索引。您可能想要做的是使用哈希。
my %skipper_with_name = ('The Skipper' => \@skipper);
'The Skipper'
现在您可以通过标识符引用数组。
print Dumper $skipper_with_name{'The Skipper'};
#or
print @{ $skipper_with_name{'The Skipper'} };