2009-11-30 8 views

Respuesta

12

¿Quieres File::Spec 's catpath:

 
     catpath() 
     Takes volume, directory and file portions and returns an entire path. 
     Under Unix, $volume is ignored, and directory and file are 
     concatenated. A '/' is inserted if need be. On other OSes, $volume 
     is significant. 

      $full_path = File::Spec->catpath($volume, $directory, $file); 
-6

P: ¿Qué separador de ruta debo usar para permitir que mi script funcione tanto en Windows como en Unix?

A: /.

 
Explanation: 
Windows can work similarly to Unix with/as path separator. 
(Mac OS uses : as a path separator instead of /). 

The File::Spec modules can also help. 

    use File::Spec::Functions; 
    chdir(updir());  # go up one directory 
    $file = catfile(curdir(), 'temp', 'file.txt'); 
    # on Unix and Win32, './temp/file.txt' 
    # on Mac OS, ':temp:file.txt' 
    # on VMS, '[.temp]file.txt' 

Source: 
http://www.xav.com/perl/lib/Pod/perlport.html 
+2

no, perl no convierte/(excepto en VMS, ¿no?) - simplemente lo usa, y funciona bien en la mayoría de las llamadas de biblioteca de Windows C. – ysth

+2

Tu fuente está equivocada y es completamente incorrecta. –

+0

@ysth, el/siempre funciona bien en mi Windows, mientras que \ a veces causa problemas. Pensé que mi respuesta iba al grano, pero se votó negativamente, así que me estoy desconcertando y estaba tratando de encontrar apoyo para mi respuesta. Gracias por el comentario. Si Perl se convierte o no, es posible que esté malinterpretando la pregunta del OP. – Mike

8

¿Quieres File::Spec. Hay versiones específicas para Unix, Win32 y MacOS, así como others.

+6

Nunca utiliza las versiones específicas de la plataforma directamente. Solo necesitas File :: Spec. Se da cuenta del resto para ti. –

+0

Acepto que no debe usar las versiones específicas, por lo que mi respuesta fue solo File :: Spec con un poco de información adicional. – s1n

2

Parece que está utilizando el separador de ruta para indicar el carácter entre los componentes de directorio/nombre de archivo. Pero por si acaso quisiste decir el otro significado:

Algunas cosas (especialmente variables de entorno como MANPATH o PERL5LIB) toman una lista de nombres de archivos o directorios, separados por un carácter separador de ruta. El módulo de configuración de Perl proporciona portablemente un carácter como $ Config :: Config {'path_sep'}.

5

Si encuentra File :: Spec engorroso, como yo, tratar Path::Class. Le proporciona objetos de directorio y archivo para trabajar, en lugar de tener que llamar a largos métodos File :: Spec class en cadenas.

Cuestiones relacionadas