Asegúrese de que no se manejan los archivos y directorios en forma de cadenas y simplemente concatena con una raya vertical en el medio. Perl:
$path = File::Spec->catfile("dir1", "dir2", "file")
Recuerde que Windows tiene volúmenes:
($volume, $path, $file) = File::Spec->splitpath($full_path);
@directories = File::Spec->splitdir($path);
Cuando se ejecutan otros programas, trate de evitar la participación de la cáscara. En Perl, al ejecutar un comando con la función system
, se puede obtener fácilmente mal con:
$full_command = 'C:\Documents and Settings/program.exe "arg1" arg2'; # spaces alert!
system($full_command);
su lugar, puede ejecutar el sistema con una lista como argumento: el ejecutable y los argumentos son cadenas separadas. En ese caso, el shell no se involucra y no se mete en problemas con respecto al escape del shell o espacios en los nombres de los archivos.
system('C:\Documents and Settings/program.exe', 'arg1', 'arg2');
Hay un montón de liendres portabilidad documentados en el manual perlport.
Mejor aún, use la constante 'os.path.sep' como separador de ruta. – dan04
¡Gracias, Alex! Si shebang se ignora en Windows, entonces ¿por qué hay esta pregunta "¿Cómo ignoro el Perl shebang en Windows con Apache 2?". Consulte http://stackoverflow.com/questions/2036577/how-doi-i-ignore-the-perl-shebang-on-windows-with-apache-2. – Tim
@Tim, mientras que Windows ignora el shebang, los programas que se ejecutan bajo Windows pueden ver esa línea, y lo mismo ocurre con un editor de texto para un servidor web. Apache en Windows hace su propia interpretación de shebang, pero lidiar con eso es un problema de administración del sistema sobre la configuración de Apache, nada que ver con Python o stackoverflow en absoluto (es una pregunta de servidor). –