Полагаю, у вас есть данные, буферизованные в некоторых ранее открытых файловых дескрипторах.Попробуйте закрыть их перед повторным открытием:
open my $fd, ">>", $file or die "Can't open $file: $!";
print $fd, $data;
close $fd or die "Can't close: $!";
Еще лучше, вы можете добавить эти файловые файлы к массиву / хэшу и записать их в очистку:
push @handles, $fd;
# later
print $_ "\n.end\n" for @handles;
Вот примервоспроизведите «невозможное» приложение в середине:
#!/usr/bin/perl -w
use strict;
my $file = "file";
open my $fd, ">>", $file;
print $fd "begin"; # no \n -- write buffered
open my $fd2, ">>", $file;
print $fd2 "\nend\n";
close $fd2; # file flushed on close
# program ends here -- $fd finally closed
# you're left with "end\nbegin"