在if语句中Perl变量变空

时间:2012-08-21 12:41:44

标签: perl variables if-statement

这让我发疯了,一旦我输入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

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分: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 strictuse warnings(如果您尚未这样做)。在执行外部匹配后检查$1的值,以验证$needle是否会获得您期望的值。