Si el fichero tiene un formato reconocido y está formado por registros de igual longitud, podrías usar la función seek() para posicionarte dentro del fichero y modificar los registros.
Si el fichero es de tipo texto, en cada línea tiene un tamaño distinto, no es posible hacer eso (bueno, sí, pero es muy complicado).
Lo normal es: leer todo el fichero, hacer las modificaciones en memoria, y guardar la nueva versión del fichero. Si tienes la preocupación de si se puede perder información porque falle el programa justo en el momento de escribir (y por ello, quede el fichero en tamaño 0), puedes hacer antes de sobreescribir el fichero una copia de seguridad. O crear un fichero con un nombre nuevo. O... otras variantes.
Si, de todas formas, quieres sobreescribir el contenido, debes indicarlo de forma correcta en el open():
- Código: Seleccionar todo
< : lectura
> : escritura
>> : añade al final del fichero
Si a éstos les añadimos un '+', entonces estamos indicando que deseamos leer y escribir a la vez:
- Código: Seleccionar todo
+< : el método preferido para leer y escribir en el fichero
+> : hará lo mismo, pero antes borrará el fichero
Más información en
perldoc perlopen.