{ my $FName='default.log'; my $fh; sub _open { open $fh, '+>', $FName or die "Can't open $FName: $!"; } sub write { my $data = shift; _open() if !defined $fh; syswrite($fh, $data) or die "write() error: $FName: $!"; } sub move { my ($src_pos, $dest_pos, $bytes) = @_; sysseek($fh, $src_pos, SEEK_SET); my $data; sysread($fh,$data,$bytes); sysseek($fh, $dest_pos, SEEK_SET); syswrite($fh, $data); sysseek($fh, 0, SEEK_END); } # other stuff as needed (setting name,...) }