如何在perl中理解这一点

如何在perl中理解这一点,perl,Perl,如何理解第二行 my @skipper = qw(blue_shirt hat jacket preserver sunscreen); my @skipper_with_name = ('The Skipper' => \@skipper); 收到以下消息: print @skipper_with_name; @skipper前面的反斜杠获取对数组的引用 如果您: The SkipperARRAY(0x209cf90) 也许您希望第二个数组使用散列,这意味着Skipper可以用作访

如何理解第二行

my @skipper = qw(blue_shirt hat jacket preserver sunscreen);
my @skipper_with_name = ('The Skipper' => \@skipper);
收到以下消息:

print @skipper_with_name;

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

如果您:

The SkipperARRAY(0x209cf90)
也许您希望第二个数组使用散列,这意味着
Skipper
可以用作访问
@Skipper
的键:

use Data::Dumper;
print Dumper \@skipper_with_name;

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

这是一个新数组,其中存储了对初始数组的引用(数组前面的斜线)。如果打印它,则只获取内存地址,首先需要通过再次在
@
符号前面加上前缀来解除对它的引用,以获取哈希的内容

但是,这没有实际意义,数组只能有数字索引。您可能想做的是使用散列

my %skipper_with_name = ('The Skipper' => \@skipper);
print Dumper \%skipper_with_name;
my @skipper_copy = @{$skipper_with_name{'The Skipper'}};
现在,您可以通过
“Skipper”
标识符引用数组

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

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

此外,如果您希望名为的
@skipper\u是一个
散列
而不是
数组
,我将指出
@
仅用于数组,
%
是名为
%skipper\u的符号。此外,尽管在哈希中最常用的是
=>
来显示键/值关系,但它本质上只是一个逗号,因此可以毫无错误地用于创建数组

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

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

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

谢谢,这就是我想要的。
=>
不是一个
关系
操作员或其他什么。这是一个漂亮的惰性运算符:
=>
运算符是逗号的同义词,只是如果左边的单词以字母或下划线开头,并且只由字母、数字和下划线组成,它就会被解释为字符串。在loldop上,我并不是说=>运算符实际上定义了关系,只是人们习惯用这种方式来提高可读性。正如你所说,它是逗号的同义词。欢迎来到
SO
!如果你想对某人说谢谢,你可以投他的票。如果你想说
非常感谢!这真的很有帮助,它解决了我的问题,你是向导
,你可以接受他的答案-按绿色的棍子,这对初学者来说是很难理解的
 $skipper_with_name[0] = 'The Skipper' 
 $skipper_with_name[1] = \@skipper