0

我知道 file::tail 在等待搜索文件时会阻塞读取。但是,在该等待间隔期间,是否可以一次发送文件已找到的所有行?而不是它找到的每行发送一封电子邮件?所以如果我有行:

问题 112323

某物

问题 93483948

某物

它为第一个问题发送一封电子邮件,为第二个问题发送第二个电子邮件。而不是两者的聚合。我显然不能将子程序放在 while 之外,因为它不会退出。处理这个问题的最佳方法是什么?想法?谢谢!

my agg_lines=();
use File::Tail;
$file=File::Tail->new(name=>$name, maxinterval=>300, adjustafter=>7);
while (defined($line=$file->read)) {
    if($line=~m/.\|ISSUE  \|./)
    {
        push(@agg_lines,$line);
    }
      send_mail(join("\n",@agglines));
  }
4

1 回答 1

0
use File::Tail qw( );

my $tail = File::Tail->new(name => $name);
while (my $block = $tail->read()) {
    $tail->nowait(1);
    while (my $line = $tail->read()) { $block .= $line; }
    $tail->nowait(0);

    send_mail($block);
}
于 2013-06-07T06:32:26.130 回答