我想你已經在一些以前打開的文件描述符中緩衝了數據。嘗試重新打開之前關閉它們:
open my $fd, ">>", $file or die "Can't open $file: $!";
print $fd, $data;
close $fd or die "Can't close: $!";
更重要的是,你可以添加這些filehanles到一個數組/哈希和寫入他們在清理:
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"
您確定在添加「.end」部分後,您沒有寫入另一個進程中的文件嗎?隨着代碼的寫入,您所描述的內容絕對不會發生。 – geoffspear 2011-05-04 12:37:56
這對我來說工作得很好。是@SPICE_FILES的唯一內容,您是否正在編寫「.end」以外的任何內容? – Arunmu 2011-05-04 12:45:43
你在做什麼平臺? – crazyscot 2011-05-04 12:57:23