Создайте саб, который сделает открытие за вас.
sub myappend {
my ($fname, @args) = @_;
open my $fh, '>>', $fname or die $!;
print $fh @args;
close $fh or die $!;
}
myappend($outfile, $line);
Либо вместо печати нажмите на массив и дождитесь окончания печати.
while ( ... ) {
push @print, $line;
}
if (@print) {
open my $fh, '>>', $outfile or die $!;
print $fh @print;
}
Или, для нескольких файлов
while ( ... ) {
push @{$print{$outfile}}, $line;
}
for my $key (%print) {
open my $fh, '>>', $key or die $!;
print $fh @{$print{$key}};
}