0

基本的に、私はhtmlファイルをループして、いくつかの正規表現を探しています。それらは一致しますが、すべてのファイルに一致が含まれるとは限りませんが、ループが実行されると、すべての反復に同じ一致が含まれます(そのファイルに含まれていない場合でも)。$ 1を使用することにより、各反復を通じて持続していると思います。

実際の試合の直後に任意の正規表現を使用してリセットしようとしましたが、うまくいかないようです。私がそのアイデアを得たスレッドには、ベストプラクティスや元の質問の問題について多くの議論などがあるように思われたので、コードに具体的なアドバイスを求める価値があると思いました。それはおそらく素晴らしい方法で書かれていないでしょう:

# array of diff filenames
opendir(TDIR, "$folder/diff/$today") || die "can't opendir $today: $!";
@diffList = grep !/^\.\.?$/, readdir(TDIR);
closedir TDIR;

# List of diff files
print "List of Diff files:\n" . join("\n", @diffList) . "\n\n";

for($counter = 0; $counter < scalar(@diffList); $counter++) {
    # Open diff file, read in to string
    $filename = $diffList[$counter];
    open FILE, "<", "$folder/diff/$today/$filename";
    while(<FILE>)   {
        $lines .= $_;
    }
    close FILE or warn "$0: close today/$filename: $!";

    # Use regular expressions to extract the found differences
    if($lines =~ m/$plus1(.*?)$span/s) {
        $plus = $1;
        "a" =~ m/a/;
    } else {$plus = "0";}
    if($lines =~ m/$minus1(.*?)$span/s) {
        $minus = $1;
        "a" =~ m/.*/;
    } else {$minus = "0";}

    # If changes were found, send them to the database
    if($plus ne "0" && $minus ne "0") {
        # Do stuff
    }
    $plus = "0";
    $minus = "0";
}

「dostuff」の中にプリントを入れると、それは常に真であり、ファイルの1つにあるのと同じ2つの値を常に示します。うまくいけば、私は自分の状況を十分に説明しました。アドバイスをいただければ幸いです。

4

2 に答える 2

1

あなたのコードが、新しく読み込まれたファイルから行を に追加している可能性があります$lines。各反復後に明示的にクリアしようとしましたか?

于 2013-03-12T21:45:04.037 に答える
0

すでに回答されていますが、ファイルを読み取るための別の構文を検討することもできます。それは著しく速くなり、このような小さなバグを回避するのに役立ちます.

これを追加して、オープン/クローズの間にファイルを読み取るだけです:

local $/ = undef;
$lines = <FILE>;

これにより、一時的に行区切りの設定が解除され、ファイル全体が一度に読み取られます。同じスコープで別のファイルを読み取る必要がある場合は、 { } ブロックで囲みます。

于 2013-03-13T00:02:48.703 に答える