Не так уж плохо для "виртуального новичка". Единственное, что вы можете сделать, это поместить «$ found = 1» внутри блока «if ($ found == 0)», чтобы вы не делали это назначение каждый раз между $ start и $ stop.
Другая вещь, которая, на мой взгляд, несколько уродлива, заключается в том, что вы открываете один и тот же обработчик файлов каждый раз, когда вводите блок $ start / $ stop.
Это показывает путь к этому:
#!/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
}