2012-04-27 13 views
7

configuración siguiente directorio:ruta absoluta relativa perl

/dira/dirb 
/dira/dirb/myprog.pl 

/dira/dirb/testa/myfilesdir contiene los siguientes archivos

/dira/dirb/testa/myfilesdir/file1.txt 
/dira/dirb/testa/myfilesdir/file2.txt 

dir actual:

/dir/dirb 

./myprog.pl -p testa/myfilesdir 

Ciclo a través de archivos

while (my $file_to_proc = readdir(DIR)) { 
... 

$file_to_proc = file1.txt 
$file_to_proc = file2.txt 

lo que yo quiero es

$myfile = /dira/dirb/testa/myfilesdir/file1.txt 
$myfile = /dira/dirb/testa/myfilesdir/file2.txt 

intentado un módulo de perl diferente pocos (rel2abs CWD), pero es el uso de directorio actual. No puedo usar el directorio actual porque la entrada podría ser una ruta relativa o absoluta.

Respuesta

9

Utilice el módulo File::Spec. Aquí un ejemplo:

use warnings; 
use strict; 
use File::Spec; 

for (@ARGV) { 
    chomp; 
    if (-f $_) { 
     printf qq[%s\n], File::Spec->rel2abs($_); 
    } 
} 

Run se siente:

perl script.pl mydir/* 

y se imprimirá rutas absolutas de archivos.


ACTUALIZADO con un programa más eficiente. Gracias a las sugerencias de TLP.

use warnings; 
use strict; 
use File::Spec; 

for (@ARGV) { 
    if (-f) { 
     print File::Spec->rel2abs($_), "\n"; 
    } 
} 
+1

'chomp' parece redundante aquí. '-f' probará' $ _' si el argumento se omite, lo que también hace '$ _' redundante. Además, argumentaría que este es un uso redundante de 'printf'. – TLP

+0

@TLP: Gracias. He actualizado la respuesta con tus sugerencias. Mucho mejor ahora pero dejé el programa original – Birei

+0

De nada. – TLP

Cuestiones relacionadas