perlmonks.org( http://www.perlmonks.org/?node_id=870806 )で使用できるものを見つけましたが、動作させることができません。
問題なくファイルを読み取って配列を作成できます。次に、配列の各インデックス(各正規表現)をファイルの各行と比較し、一致した行の前の行と後の行を出力します。
私のコード:
# List of regex's. If this file doesn't exist, we can't continue
open ( $fh, "<", $DEF_FILE ) || die ("Can't open regex file: $DEF_FILE");
while (<$fh>) {
chomp;
push (@bad_strings, $_);
}
close $fh || die "Cannot close regex file: $DEF_FILE: $!";
$file = '/tmp/mydirectory/myfile.txt';
eval { open ( $fh, "<", $file ); };
if ($@) {
# If there was an error opening the file, just move on
print "Error opening file: $file.\n";
} else {
# If no error, process the file
foreach $bad_string (@bad_strings) {
$this_line = "";
$do_next = 0;
seek($fh, 0, 0); # move pointer to 0 each time through
while(<$fh>) {
$last_line = $this_line;
$this_line = $_;
my $rege = eval "sub{ \$_[0] =~ $bad_string }"; # Real-time regex
if ($rege->( $this_line )) { # Line 82
print $last_line unless $do_next;
print $this_line;
$do_next = 1;
} else {
print $this_line if $do_next;
$last_line = "";
$do_next = 0;
}
}
}
} # End "if error opening file" check
これは、ファイルに1行あたりの文字列だけがあり、次のような簡単なテストを実行しif ($this_line =~ /$string_to_search_for/i )
たときに機能していましたが、ファイルの正規表現と「リアルタイム」評価ステートメントに切り替えると、Can't use string ("") as a subroutine ref while "strict refs" in use at scrub_file.pl line 82
82行目がになりif ($rege->($this_line)) {
ます。
そのエラーメッセージの前に、私は受け取っています:Use of uninitialized value in subroutine entry at scrub_hhsysdump_file.pl line 82, <$fh>
私はそのエラーメッセージをある程度理解していますが、これまでのところ、perlエンジンを私のコードに満足させることができないようです。
perlはまだ新しく、常にポインタを探しています。前もって感謝します。