in reply to Both read and write

A small tip when using seek: The POSITION argument can be negative. This is useful if you read a record then wish to overwrite it:
seek HANDLE,-(length $record),SEEK_CUR;