这让我发疯了,一旦我输入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
任何人都可以帮忙吗?
答案 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 strict
和use warnings
(如果您尚未这样做)。在执行外部匹配后检查$1
的值,以验证$needle
是否会获得您期望的值。