Assurez-vous que vous ne gérez pas les fichiers et répertoires sous forme de chaînes et simplement les concaténer avec une barre oblique entre les deux. Perl:
$path = File::Spec->catfile("dir1", "dir2", "file")
Rappelez-vous que Windows a des volumes:
($volume, $path, $file) = File::Spec->splitpath($full_path);
@directories = File::Spec->splitdir($path);
Lors de l'exécution d'autres programmes, essayez de ne pas impliquer la coquille. En Perl, lorsque vous exécutez une commande avec la fonction system
, vous pouvez facilement se tromper avec:
$full_command = 'C:\Documents and Settings/program.exe "arg1" arg2'; # spaces alert!
system($full_command);
Au lieu de cela, vous pouvez exécuter le système avec une liste comme argument: l'exécutable et les arguments étant des chaînes distinctes. Dans ce cas, le shell n'intervient pas et vous n'avez pas d'ennuis concernant l'échappement du shell ou les espaces dans les noms de fichiers.
system('C:\Documents and Settings/program.exe', 'arg1', 'arg2');
Il y a un tas de portabilité nits documentées dans le manuel perlport.
Mieux encore, utilisez la constante 'os.path.sep' comme séparateur de chemin. – dan04
Merci, Alex! Si shebang est ignoré dans Windows, alors pourquoi il y a cette question "Comment puis-je ignorer le shebang Perl sur Windows avec Apache 2?". Voir http://stackoverflow.com/questions/2036577/how-do-i-ignore-the-perl-shebang-on-windows-with-apache-2. – Tim
@Tim, alors que Windows lui-même ignore le shebang, les programmes s'exécutant sous Windows peuvent bien sûr voir cette ligne - et tout comme pour un éditeur de texte, il en va de même pour un serveur web. Apache sur Windows fait sa propre interprétation de shebang - mais gérer cela est un problème d'administration système à propos de la configuration d'apache, rien à voir avec Python ou même stackoverflow (c'est une question serverfault). –