# NOTE: this code is untested chopf('/path/to/log.dat', 1000000); sub chopf{ my ($file, $size) = @_; local *HEAD; local *TAIL; return 1 unless -s $file > $size; return 0 unless open HEAD, "+<$file"; unless (open TAIL, "+<$file"){ close HEAD; return 0; } seek TAIL, -s($file) - $size, 0; ; print HEAD $_ while (); truncate HEAD, tell(HEAD); close HEAD; close TAIL; return 1; }