我正在尝试使用另一个数组来过滤Perl中的术语数组。我在 OS X 上拥有 Perl 5.18.2,但如果我使用 use 5.010
,行为是相同的。以下是我的基本设置:
#!/usr/bin/perl
#use strict;
my @terms = ('alpha','beta test','gamma','delta quadrant','epsilon',
'zeta','eta','theta chi','one iota','kappa');
my @filters = ('beta','gamma','epsilon','iota');
foreach $filter (@filters) {
for my $ind (0 .. $#terms) {
if (grep { /$filter/ } $terms[$ind]) {
splice @terms,$ind,1;
}
}
}
这样可以筛选出与各种搜索条件匹配的行,但是数组长度并没有改变。如果我输出结果为@terms
的数组,会得到如下内容:
[alpha]
[delta quadrant]
[zeta]
[eta]
[theta chi]
[kappa]
[]
[]
[]
[]
正如您所期望的那样,打印
scalar(@terms)
会得到10
的结果。我想要的是一个长度为6的结果数组,而不是末尾的四个空项。我该如何获得这个结果?为什么数组没有缩小,因为关于
splice
的perldoc页面说,“数组会根据需要增长或缩小。”(我不太擅长Perl,所以如果您在想“为什么不只是……?”,几乎肯定是因为我不知道或者听到时没有理解它。)
grep
操作数组并返回匹配的元素。也许你想要使用$terms[$ind] =~ /$filter/
来匹配单个元素? - tadmanuse VERSION
只指定了所需的最低版本;它并不模拟 Perl 解释器在该版本中的存在。 - Matt Jacob