相关疑难解决方法(0)

将数组和标量传递给Perl子例程

可能重复: 如何将一个数组和一个字符串作为参数传递给函数?

我有一个函数或子例程,它将第一个参数作为数组,第二个参数作为标量.例如,

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.

perl reference subroutine

29
推荐指数
4
解决办法
6万
查看次数

如何验证Perl中的数组(列表)中是否存在值?

我有一个可能的值列表:

@a = qw(foo bar baz);
Run Code Online (Sandbox Code Playgroud)

如何以简明的方式检查值$val是否存在@a

一个明显的实现是遍历列表,但我确信TMTOWTDI.


感谢所有回答的人!我想强调的三个答案是:

  1. 接受的答案 - 最"内置"和向后兼容的方式.

  2. RET的答案是最干净的,但只适用于Perl 5.10及更高版本.

  3. draegtun的答案(可能)有点快,但需要使用额外的模块.我不喜欢添加依赖项,如果我可以避免它们,在这种情况下不需要性能差异,但如果你有一个1,000,000元素的列表,你可能想尝试这个答案.

arrays perl list find

20
推荐指数
6
解决办法
4万
查看次数

检查数组中元素的更快方法?

此函数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)

arrays perl

9
推荐指数
4
解决办法
4297
查看次数

标签 统计

perl ×3

arrays ×2

find ×1

list ×1

reference ×1

subroutine ×1