如何在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