2010-05-24 17 views
14

En caso de Java, podemos obtener el separador de ruta utilizando¿Cómo puedo obtener el separador del directorio (ruta del archivo) en Perl?

System.getProperty("path.separator"); 

¿Hay una manera similar en Perl? Todo lo que quiero hacer es encontrar un directorio, subdirectorio inmediato. Digamos que me están dando dos argumentos $a y $b; Estoy dividiendo el primero basado en el separador de ruta y uniéndolo nuevamente excepto el último fragmento y comparando con el segundo argumento.

El problema es que mi código tiene que ser genérico y para eso necesito saber cuál es el separador de ruta dependiente del sistema.

+1

¿Has visto otras preguntas? http://stackoverflow.com/questions/2859015/why-dont-my-perl-regexes-correctly-extract-a-filename-from-a-path, http://stackoverflow.com/questions/1818093/how- can-i-construct-os-independent-file-paths-in-perl – Zaid

+5

Para el beneficio de los motores de búsqueda: esta pregunta y sus respuestas en realidad tratan con el separador de directorios (generalmente barra inclinada o barra invertida). El separador de ruta es una cosa diferente (generalmente dos puntos o punto y coma) con un propósito diferente y es devuelto por 'use Config; $ Config {path_sep} '. – daxim

+0

@daxim - Edité el título, espero que sea menos ambiguo ahora – DVK

Respuesta

3

La respuesta aceptada resuelve su problema real, pero si realmente desea conseguir el separador (utilizando módulos básicos solamente Perl):

my $sep = File::Spec->catfile('', ''); 

Esto une dos nombres de archivo vacíos con el separador del sistema actual, dejando solo el separador.

20

No debe formar rutas de archivos con la mano - en lugar de utilizar File::Spec módulo:

($volume, $directories,$file) = File::Spec->splitpath($path); 
@dirs = File::Spec->splitdir($directories); 
$path = File::Spec->catdir(@directories); 
$path = File::Spec->catfile(@directories, $filename); 
+0

No se olvide de splitdir. Una forma más elegante de trabajar con rutas es Path :: Class disponible desde CPAN. – Schwern

+0

@Schwern - No me siento cómodo recomendando Path :: Class ya que nunca lo usé yo mismo ... pero vi recomendaciones para él en otros lugares en SO, así que lo verificaré. Buen punto sobre splitdir, aunque me temo que si continúo, la respuesta se convertirá en copiar/pegar del POD :) – DVK

+0

Path :: Class es genial, mucho más fácil de usar que las alternativas. – singingfish

Cuestiones relacionadas