【发布时间】:2016-11-03 14:03:19
【问题描述】:
这是我的测试代码:
#!/bin/perl
use strict;
use Array::Utils qw[array_minus];
sub sub1 {
my @array1 = qw(1 2 3);
my @array2 = qw(1 3 5);
my @arrayMinus = array_minus(@array1, @array2);
my @sortedArrayMinus = sort @arrayMinus;
print "Result from array_minus + sort : " . join(",", @sortedArrayMinus) . "\n";
my @sortedArrayMinus2 = sort array_minus(@array1, @array2);
print "Result from sort array_minus : " . join(",", @sortedArrayMinus2) . "\n";
}
sub1("a","b");
当我运行它时,它会给出以下结果:
Result from array_minus + sort : 2
Can't use string ("b") as an ARRAY ref while "strict refs" in use at Array/Utils.pm line 123.
因此,对 array_minus 的第二次调用由于参数错误而失败。
我正在使用 Array::Utils 库的 0.5 版(我已从 http://cpansearch.perl.org/src/ZMIJ/Array-Utils-0.5/Utils.pm 手动复制它) 该文件的相关行是:
sub array_minus(\@\@) {
my %e = map{ $_ => undef } @{$_[1]};
return grep( ! exists( $e{$_} ), @{$_[0]} );
}
如果我调试array_minus中@_的值,第一次调用它的值是OK的,但第二次调用它是['a','b']。
所以它的行为就像 array_minus sub 接收 sub1 的参数,而不是我传递的参数,但只有当我还要求在同一行对结果进行排序时。我的代码有什么问题? 我正在使用 Perl 5.22.1。
【问题讨论】:
-
您正在使用字符串初始化似乎只包含数字的数组。 本身不一定是错的,但很奇怪。此外,普通排序将使用字符串比较而不是数字,因此
@x = (11, 1, 7)将排序为1, 11, 7-- 这可能不是您想要的。
标签: arrays perl sorting parameters