0

这让我发疯,一旦我输入 if 语句,Perl 就会丢失变量的值......而且奇怪的是,它只是那个变量,任何其他变量都不会失去它的值

open (MYFILE, "b");

my $haysack = "";
while (<MYFILE>)
{
    $haysack  = $haysack . "$_";
}
close (MYFILE);

open (MYFILE2, "ip_range");
my $needles = "";
while (<MYFILE2>)
{
    $needles  = $needles . "$_";
}
close (MYFILE2);

my $someOtherValue = "blabla";

while ($needles =~ m/(.*?)\n/g)
{
    $needle = $1;

    if ($haysack =~ m/$needle/ims)
    {
        print "FOUND :  $needle\n";
        print "$someOtherValue\n";
    }
}

所以代码成功地进入了 if 语句,但是一旦它完成,我得到以下输出:

FOUND: 
blabla

谁能帮忙?

4

1 回答 1

1

这真的应该是一个评论,因为它不是一个答案,但评论不允许代码格式化,所以:

您能否提供一个完整的、可运行的、独立的、最小的示例来演示该问题而无需额外的移动部件,例如读取文件?类似于以下内容:

#!/usr/bin/env perl

use strict;
use warnings;

my $haysack = "Foo
Bar
Baz
";

my $needles = "a
b
c
";

while ($needles =~ m/(.*?)\n/g) {
    my $needle = $1;

    if ($haysack =~ m/$needle/ims) {
        print "FOUND :  $needle\n";
    }
}

...除了我的运行完美,产生输出

FOUND :  a
FOUND :  b

而不是失败。请注意,在创建最小失败示例的过程中,您很可能会发现问题的解决方案......

至于一般故障排除建议,use strict如果use warnings您还没有这样做。在进行外部匹配后检查 的值,$1以验证$needle将获得您期望的值。

于 2012-08-21T13:33:13.163 回答