我正在编写这个简单的代码,以便在我的日志中找到“错误”时收到警报电子邮件。
问题是我想每次扫描只获得一个警报,我的代码会生成基于警报的文件数量匹配错误。
open (LOG, "<$log") || die 'Could not OPEN log file';
while ($loglines = <LOG> ) {
if ($loglines =~ /Error/) {
print "Error on the log \n";
}
}
close (LOG);
结果看起来像
日志错误
日志错误
日志错误
日志错误
日志错误
相反,我只想要一个打印“日志错误”,当我在日志文件中匹配错误时,我可以收到一封电子邮件。我错过了什么?
答案 0 :(得分:3)
open my $LOG, "<", $log or die "Could not OPEN log file $log";
while (my $loglines = <$LOG>) {
if ($loglines =~ /Error/) {
print "Error on the log\n";
last;
}
}
close($LOG);
这方面有很多改进。最重要的变化是增加last;
;它在第一场比赛中终止了循环。
其他变化是:
or
”代替“||
”。$loglines
的局部变量(假设您不需要/在别处使用它)。有些人更喜欢在循环中添加标签,然后在last
语句中明确使用该标签:
open my $LOG, "<", $log or die "Could not OPEN log file $log";
LOG_READER:
while (my $loglines = <$LOG>) {
if ($loglines =~ /Error/) {
print "Error on the log\n";
last LOG_READER;
}
}
close($LOG);
我不相信这里有很多好处,假设没有封闭的循环。如果有任何封闭循环,则使用标签。
我假设您正在使用:
use strict;
use warnings;
在脚本的顶部?如果没有,那就这样做。 Perl专家使用它们来确保它们避免犯愚蠢的错误; Perl新手应该出于同样的原因使用它们。