Si el archivo es de texto, no puedes usar seek(), porque en cuanto modificas una línea estás cambiando la posición de inicio del resto de las líneas. Otra cosa es que el archivo fuera de registros de igual tamaño.
En el primer caso, puedes resolverlo según lo que se indica en una de las preguntas de perlfaq5:
How do I change, delete, or insert a line in a file, or append to the beginning of a file?.
Puedes usar el método de ir leyendo por líneas desde el archivo original e ir grabando las modificaciones en un archivo nuevo, y al terminar, borrar el viejo y renombrar el nuevo.
Si el archivo no es muy grande, puedes leerlo completamente en memoria, hacer las modificaciones, y grabar el resultado al propio archivo.
Si las modificaciones son pequeñas, incluso hasta se puede resolver en una línea de comando, usando el modo de edición en linea. Ejemplo: poner números a las líneas de un archivo.
perl -p -i -e '$_ = sprintf "%03d %s", $., $_' archivo.txt