Убедитесь, что вы не обрабатываете файлы и каталоги как строки, а просто объединяете их с косой чертой между ними. Perl:
$path = File::Spec->catfile("dir1", "dir2", "file")
Помните, что в Windows есть тома:
($volume, $path, $file) = File::Spec->splitpath($full_path);
@directories = File::Spec->splitdir($path);
При запуске других программ старайтесь не задействовать оболочку. В Perl, когда вы запускаете команду с функцией system
, вы можете легко ошибиться с помощью:
$full_command = 'C:\Documents and Settings/program.exe "arg1" arg2'; # spaces alert!
system($full_command);
Вместо этого вы можете запустить систему со списком в качестве аргумента: исполняемый файл и аргументы являются отдельными строками. В этом случае оболочка не включается, и у вас не возникает проблем с выходом оболочки или пробелами в именах файлов.
system('C:\Documents and Settings/program.exe', 'arg1', 'arg2');
В руководстве perlport описано несколько штук переносимости.