por explorer » 2008-10-30 15:28 @686
En efecto, la línea copia un fichero que está en un nivel superior al nivel en que estamos.
El módulo File::Copy realiza muchas comprobaciones antes de realizar el movimiento, que, primero, lo intenta con un rename(), y si falla, lo intenta con un copy() seguido de un utime() (copiar atributos) y de un unlink() (borrado).
¿Esto tarda más que ejecutar el proceso externo? Pues yo creo que depende, porque el proceso mv va a realizar los mismos pasos (renombrado o copia) pero con menos comprobaciones, ya que el proceso sabe en qué sistema operativo se encuentra y qué reglas puede aplicar.
También depende del número de veces que por unidad de tiempo se ejecute esta línea. Desde luego, es muy costoso crear nuevos procesos externos al nuestro para realizar otras operaciones. Bueno... "era" muy costoso, ya que las máquinas y sistemas operativos actuales son tan rápidos y eficientes que ese costo se ha reducido mucho.
Habría que hacer un benchmark para comprobar qué es mejor.
Desde luego, el hacerlo en Perl tiene una gran ventaja: es independiente del sistema operativo, por lo que, en el futuro, podríamos instalar nuestro programa en otra máquina distinta. Y, también, no tenemos que preocuparnos de saber si el comando mv está disponible en el sistema o no.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES