[Perl] funcion system

Antonio Galindo Castro funkymonster en gmail.com
Jue Feb 2 13:03:04 CST 2006


Hola Ariel, bueno existen dos cosas con tu problema, si lo que quieres es
hacer un tar desde Perl, ¿por qué no utilizas un modulo de Perl?, por
ejemplo:

____________________________________________________________________
#!/usr/bin/perl

use strict;

use Archive::Tar;
use POSIX ('locale_h', 'strftime');

my $tar = Archive::Tar->new;

$tar->add_files('/chicharo/Antonio.txt',  '/chicharo/Viernes 27 de mayo de
2005.doc');
$tar->write('backup-'.(strftime "%d%m%y", localtime).'.tar');
____________________________________________________________________

El script anterior genera archivos tar con un formato como el de tu
problema, para agregar archivos se puede hacer $tar->add_files(
@filenamelist ), al correr el script se genera algo así:

soyyo en tezcatlipoca:~$ ./crea_tar.pl
soyyo en tezcatlipoca:~$ tar tvf backup-020206.tar
-rwxr-xr-x soyyo/soyyo    4376 2006-01-26 21:55:20 chicharo/Antonio.txt
-rwxr-xr-x soyyo/soyyo  175616 2006-01-30 00:05:32 chicharo/Viernes 27 de
mayo de 2005.doc
soyyo en tezcatlipoca:~$

Ahora bien, si lo quieres hacer desde una llamada al sistema, pues antes que
nada pon bien el comando:

soyyo en tezcatlipoca:~$ tar -cfv respaldo-$(date +%d%m%y).tar
tar: respaldo-020206.tar: No se puede stat: No existe el fichero o el
directorio
tar: Salida con error demorada desde errores anteriores
soyyo en tezcatlipoca:~$

El comando tar aún no adivina de que quieres hacer el archivo, así que de
momento tendrás que pasarle los archivos que quieres incluir en él,  antes
que intentar hacerlo en Perl deberías probar tu comando desde el shell, algo
así:

soyyo en tezcatlipoca:~$ tar cfv respaldo-$(date +%d%m%y).tar /chicharo/*
tar: Removing leading `/' from member names
/chicharo/Antonio.txt
/chicharo/Viernes 27 de mayo de 2005.doc
soyyo en tezcatlipoca:~$

Si estás trabjando con el tar de gnu utiliza tar cvf, de lo contrario tar
-cf Ya estando satisfecho con la salida desde el shell, pues a transportarlo
a Perl:

____________________________________________________________________
#!/usr/bin/perl

use strict;

system ('tar cfv respaldo-$(date +%d%m%y).tar /chicharo/Antonio.txt
/chicharo/Viernes\ 27\ de\ mayo\ de\ 2005.doc');
____________________________________________________________________

Como nota final, es necesario aprender a distingir los problemas del
lenguaje de los problemas ajenos a él.  En este caso, no es una sustitución
de variable lo que querías hacer sino una sustitución de salida de comando a
nivel sistema (cosa del sistema, no de Perl).

Espero te sirva todo este rollo.

Antonio "FunkyM0nk3y" Galindo.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://tlali.iztacala.unam.mx/pipermail/perl/attachments/20060202/930009ff/attachment.htm


Más información sobre la lista de distribución Perl