0
open(LOG,"logfile.txt") or die "Unable to open $logfile:$!";
print "\n";
while(<$LOG>){
  print if /\berror\b/i;
}
close(LOG);
4

4 に答える 4

10

あなたのタイプミスは、実際にはファイルを正しい方法で開くことに一歩近づきます。つまり、推奨される 3 引数形式のopenを使用します。

use strict;
use warnings;

open(my $log, '<', "logfile.txt") or die "Open failed : $logfile : $!";
while (<$log>) {
    ...
}

ファイル ハンドルは ( のようなグローバル名ではなくLOG) レキシカル スコープの変数に格納できるため、このアプローチの方が適しています。これにより、レキシカル変数がスコープ外になったときにファイルを自動的に閉じるという追加の利点が得られます。また、より使い慣れた構文を使用して、レキシカル ファイル ハンドルをサブルーチン間で渡すことができます。

于 2010-08-02T23:23:20.800 に答える
2

さらに楽なものが必要なopen場合は、次のようにすることができます。

@ARGV = 'logfile.txt';
while ( <> ) { 
    print if /\berror\b/i;
}
于 2010-08-03T01:10:00.107 に答える
1

open LOG, "logfile.txt"; while (<LOG>) { print if /\berror\b/i; }

于 2010-08-02T22:57:57.520 に答える
1

エラーがあります:

while (<$LOG>)

読むべき

while (<LOG>)

ファイルハンドルは変数ではないので、$.

于 2010-08-02T23:00:00.633 に答える