0

私の perl スクリプトで、ファイルを開いて文字列を検索しました。成功しました。しかし、その検索の直後に同じ文字列を再度検索すると、スクリプトが元の場所からファイルの最後まで検索を開始するように見えるため、一致する文字列を見つけることができなくなります。私のコードは次のようなものです:

open ( INFILE, "./input.txt")

for($i=0; $i < 3; $i++){

    print "i = $i\n";
    $found = 0;

    while (! $found && ($line = <INFILE>)){
        if ( $line =~ /string/ ){
           print "found!\n";
           $found = 1;
        }
        else{
           print "not found!\n";
        }
    }
}

close (INFILE);

input.txt ファイル:

string
random2
random2

私は出力が次のようになることを期待していました:

i = 0
found!
i = 1
found!
i = 2 
found!

しかし、次のようになります。

i = 0
found!
i = 1
not found!
not found!
i = 2

誰でもこれで私を助けることができますか?perlを習い始めたばかりです。

4

3 に答える 3

0

perlでファイルを読み取ると、ファイルで最後に読み取った位置がマークされ、再度読み取られないため、これを取得しています。この場合、ファイル全体を読み取るため、ファイルの最後までマークし、必要ですもう一度先頭にシークして位置をリセットする

for($i=0; $i < 3; $i++ ){
    seek(INFILE,0,0);
    #...

これにより、ファイルハンドルが再び最初にリセットされますperl seek tutを参照してください

perl の学習を開始するので、ここに使用できる一般的な手順を示します。

  • 常に厳密を使用する

  • openの 3 引数形式を使用する

    open ( my $INFILE, "<", "./input.txt");
    
  • ローカリゼーションのためにすべての変数でmyを使用します

于 2013-08-07T17:31:12.250 に答える
0

変化する:

if ($line = ~/string/ ){

に:

if ($line =~ /string/ ){
于 2013-08-07T16:42:45.000 に答える