来自“虚拟新人”也不错。您可以做的一件事是将“$found=1”放在“if($found == 0)”块中,这样您就不会每次在 $start 和 $stop 之间都进行该分配。
在我看来,另一件有点难看的事情是每次输入 $start/$stop-block 时都会打开同一个文件处理程序。
这显示了一种解决方法:
#!/usr/bin/perl
use strict;
use warnings;
my $start='CINFILE=$';
my $stop='^#$';
my $filename;
my $output;
my $counter=1;
my $found=0;
while (<>) {
# Find block of lines to extract
if( /$start/../$stop/ ) {
# Start of block
if( /$start/ ) {
$filename=sprintf("boletim_%06d.log",$counter);
open($output,'>>'.$filename) or die $!;
}
# End of block
elsif ( /$end/ ) {
close($output);
$counter++;
$found = 0;
}
# Middle of block
else{
if($found == 0) {
print $output (split(/ /))[1];
$found=1;
}
else {
print $output $_;
}
}
}
# Find block of lines to extract
}