After the first record, increase the record length...to 1 MB or perhaps several MB. There's no reason to read the entire file one record at a time. Or perhaps (same idea but less code on your part):
use File::Copy qw(copy);
sysread(recordfile, $record, $record_length);
copy( \*recordfile, \*newrecordfile );