Nov 062013
 
Artículo Perl

Como siempre, en Perl hay distintas maneras de realizar una misma tarea.

En este artículo se exponen algunas de las posibilidades para realizar las operaciones básicas de manejo de ficheros: cambiar de nombre, mover y copiar ficheros.

Cambiar de nombre un fichero

Muchas de las operaciones de manejo de ficheros pueden realizarse en Perl ejecutando el comando de sistema operativo correspondiente. Por ejemplo, para cambiar de nombre un fichero en un sistema Linux, podemos realizar una llamada al comando “mv” utilizando la sintaxis de “backticks”:

`mv datos.txt datos.csv`;

Pero siempre que exista una función en Perl, es preferible utilizarla, para asegurar la portabilidad entre distintos sistemas. En este caso, el intérprete de Perl implementa una función intrínseca rename() para realizar la operación de cambio de nombre de un fichero. Por ejemplo:

rename "datos.txt", "datos.csv";

Mover un fichero

La función intrínseca “rename”, igual que ocurre con el comando “mv”, también puede ser utilizada para mover un fichero a otro directorio:

rename "pendientes/datos.txt", "procesados/datos.txt";

Pero ATENCION! esta función no permite mover un fichero a un filesystem o disco distinto de aquel en el que se encuentra el fichero a mover.

Para evitar este problema, se pueden utilizar el método “move” o el método “mv” del módulo “File::Copy”. Ambos mueven un fichero a otro filesystem/disco, copiándolo primero, y eliminando después el fichero original. La diferencia entre ellos es que “move” crea el nuevo fichero con los permisos por defecto, mientras que mv mantiene también los permisos del fichero de partida.

Así, por ejemplo, si tenemos dos ficheros “datos.txt” y “datos2.txt” con permiso de lectura/escritura sólamente para el propietario:

$ ls -l datos*
-rw------- 1 user user 19 Nov 6 14:50 datos.txt
-rw------- 1 user user 19 Nov 6 13:18 datos2.txt

Podemos utilizar el siguiente código perl para mover ambos ficheros a otros filesystem montado en “/disco2”, utilizando “move” y “mv”:

use File::Copy qw(move mv);

move "datos.txt", "/disco2/datos.txt";
mv "datos2.txt", "/disco2/datos2.txt";

y el resultado que obtenemos es el siguiente:

$ ls -l /disco2/datos*
-rw-r--r-- 1 user user 19 Nov  6 14:50 /disco2/datos.txt
-rw------- 1 user user 19 Nov  6 13:18 /disco2/datos2.txt

Como vemos, el fichero “datos2.txt” mantiene los permisos que tenía, mientras que el fichero “datos.txt” en disco2 tiene los permisos por defecto.

Copiar un fichero

En este caso, no existe una función built-in que ofrezca la funcionalidad de copiar un fichero. En su lugar, el módulo File::Copy ofrece varios métodos que permiten copiar un fichero, con algunos matices:

  • copy, cp – Los métodos copy y cp son análogos a los métodos move y mv que hemos comentado anteriormente. El método copy crea el nuevo fichero con los permisos por defecto, mientras que el método cp preserva los permisos del fichero original
  • syscopy – El método syscopy realiza una copia lo más exacta posible del fichero, manteniendo todos los atributos específicos de los distintos sistemas operativos. Así, por ejemplo, en un sistema Windows, la llamada a syscopy sería equivalente a una llamada a la función Win32::CopyFile del API de Windows.

Referencias

Indice de artículos sobre programación en lenguaje Perl

 Publicado por en 1:01 pm

 Deja un comentario

(requerido)

(requerido)