我在子程序中有这 3 行代码,我试图将它们一起写在一行上..但我完全迷失了
my %p = @_;
my $arr = $p{name};
my @a = @$arr;
正确的做法是什么?
谢谢!
最佳答案
my %p = @_;
@_
假定包含键值对,然后使用这些键值对构建哈希 %p
。
my $arr = $p{name};
假定参数列表包含类似于 name, [1, 2, 3,]
的内容,因此 $p{name}
是一个引用到一个数组。
my @a = @$arr;
取消引用该数组引用以获取数组@
。
这里是一个可以在 sub
中使用此前奏的调用:
func(this => 'that', name => [1, 2, 3]);
如果您想将整个前奏简化为单个语句,您可以使用:
my @a = @{ { @_ }->{name} };
如:
#!/usr/bin/env perl
use strict;
use warnings;
use YAML::XS;
func(this => 'that', name => [1, 2, 3]);
sub func {
my @a = @{ { @_ }->{name} };
print Dump \@a;
}
输出:
--- - 1 - 2 - 3
If the array pointed to by name
is large, and if you do not need a shallow copy, however, it may be better to just stick with references:
my $aref = { @_ }->{ name };
关于Perl 哈希、数组和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35604549/