可能重复: 如何将一个数组和一个字符串作为参数传递给函数?
我有一个函数或子例程,它将第一个参数作为数组,第二个参数作为标量.例如,
sub calc {
my @array = $_[0];
my $scalar = $_[1];
print @array, $scalar;
}
Run Code Online (Sandbox Code Playgroud)
问题是该函数使数组等于传入的数组的第一个值,并且标量是传入的数组的第二个值.当我想要第一个数组是整个数组时,我不知道需要制作数组的深层副本.例如,
my @array = ('51', 'M');
my $scalar = 21;
Run Code Online (Sandbox Code Playgroud)
和
calc(@array, $scalar)
Run Code Online (Sandbox Code Playgroud)
会51 M在我想要的时候打印51 M 21.
我有一个可能的值列表:
@a = qw(foo bar baz);
Run Code Online (Sandbox Code Playgroud)
如何以简明的方式检查值$val是否存在@a?
一个明显的实现是遍历列表,但我确信TMTOWTDI.
感谢所有回答的人!我想强调的三个答案是:
接受的答案 - 最"内置"和向后兼容的方式.
RET的答案是最干净的,但只适用于Perl 5.10及更高版本.
draegtun的答案(可能)有点快,但需要使用额外的模块.我不喜欢添加依赖项,如果我可以避免它们,在这种情况下不需要性能差异,但如果你有一个1,000,000元素的列表,你可能想尝试这个答案.
此函数exists与哈希相同.
我计划使用它很多.
它能以某种方式进行优化吗?
my @a = qw/a b c d/;
my $ret = array_exists("b", @a);
sub array_exists {
my ($var, @a) = @_;
foreach my $e (@a) {
if ($var eq $e) {
return 1;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)