my $pointer = 0;
foreach (@new1)
{
my $test = $_;
foreach (@chk)
{
my $check = $_;
chomp $check;
delete($new1[$pointer]) if ($test =~ /^$check/i);
}
$pointer++;
}
if 语句永远不会匹配 @new1 数组中的许多条目在数组元素(至少 88 个)的开头包含 $check 的事实。我不确定是嵌套循环导致了问题,因为如果我尝试这样做,它也无法匹配:
foreach (@chk)
{
@final = (grep /^$_/, @new1);
}
@final 是空的,但我知道 $_ 至少有 88 个整数在 @new1 中。
我在运行 Windows ActivePerl 5.14.2 的机器上编写了这段代码,并且上面的代码有效。然后我(使用@new1 的副本)比较两者并删除任何重复项(也适用于 5.14.2)。我确实尝试否定 if 匹配,但这似乎消除了 @new1 数组(因此我不需要进行哈希比较)。
当我尝试在带有 Perl 5.8.0 的 Linux RedHat 机器上运行此代码时,它似乎很难与 REGEX 中的变量匹配。如果我用我知道在@new1 中的示例对 REGEX 进行硬编码,则匹配有效,并且在第一个代码中,条目被删除(在第二个代码中,@final 中插入了一个值)。
@chk 数组是 Web 服务器上的列表文件,@new1 数组是通过在 Web 服务器上打开两个日志文件然后将一个推入另一个来创建的。
我什至在每次循环迭代中打印出 $test 和 $check 并手动检查是否有任何值匹配并且其中一些匹配。
这让我困惑了好几天,我不得不把毛巾扔进去寻求帮助,有什么想法吗?