我的目标是检查几个输入文件 ( file1
, file2
) 中的关键字 ( key1
, key2
, key3
) 并匹配一个数字。如果发生错误,程序不应停止并检查下一个单词/文件。我想给出足够的错误输出。到目前为止,我的代码是:
#!/usr/bin/perl
use strict;
use warnings;
foreach ("key1","key2","key3"){output("$_","file1")}
foreach ("key1","key2","key3"){output("$_","file2")}
foreach ("key1","key2","key3"){output("$_","file1")}
sub parse{
my $keyword = shift;
my $path = shift;
my $match;
eval{
open(FILE,"$path") or die "Cannot open file $path in parse(): $!\n";
while (my $line = <FILE>) {
if ($line =~ /^$keyword\s+(\d+)/){ ;
$match = $1;
}
}
return (1, $match) if (defined $match);
return (0)
};
if ($@){print "!!! Error in parse():\n\t $@\n";}
}
sub output{
my $keyword = shift;
my $path = shift;
my ($ok, $tmp);
($ok, $tmp) = parse("$keyword", "$path");
print "Value $tmp for keyword: $keyword\n" if $ok;
print "!!! Error for keyword: $keyword\n" if not $ok;
}
1;
与文件1:
key1 11
key2 22
key3 33
和文件2:
key1 11
key2 AB
key3 33
如果没有eval
-block,程序会按预期运行:如果file2
缺少 eg,则会发生错误并退出 Perl。使用eval
-block 会发生正确的匹配,我只得到!!! 输入文件特定行上的错误关键字错误(如果输入文件完全丢失,我会得到每一行的错误)。但我不能使用$@
. 这会为每一行创建错误。
我也尝试使用close
或open
不使用die
,但这也不起作用。
任何帮助表示赞赏!