0

これは私を夢中にさせています.Perlはifステートメントに入ると変数の値を失うだけです...そして奇妙なことに、これはその変数だけであり、他の変数はその値を失うことはありません.

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 に答える