Hãy chắc chắn rằng bạn không xử lý tập tin và thư mục như chuỗi và chỉ đơn giản là nối chúng với một dấu gạch chéo ở giữa. Perl:
$path = File::Spec->catfile("dir1", "dir2", "file")
Hãy nhớ rằng Windows có thể tích:
($volume, $path, $file) = File::Spec->splitpath($full_path);
@directories = File::Spec->splitdir($path);
Khi chạy các chương trình khác, cố gắng tránh liên quan đến vỏ. Trong Perl, khi bạn chạy một lệnh với system
chức năng, bạn có thể dễ dàng có được nó sai với:
$full_command = 'C:\Documents and Settings/program.exe "arg1" arg2'; # spaces alert!
system($full_command);
Thay vào đó, bạn có thể chạy hệ thống với một danh sách như là đối số: thực thi và các đối số là chuỗi riêng biệt. Trong trường hợp đó, trình bao không tham gia và bạn không gặp rắc rối liên quan đến việc thoát vỏ hoặc dấu cách trong tên tệp.
system('C:\Documents and Settings/program.exe', 'arg1', 'arg2');
Có một loạt các vị trí di động được ghi trong sách hướng dẫn perlport.
Tốt hơn, hãy sử dụng hằng số 'os.path.sep' làm dấu tách đường dẫn. – dan04
Cảm ơn, Alex! Nếu shebang bị bỏ qua trong cửa sổ, thì tại sao lại có câu hỏi này "Làm thế nào để bỏ qua Pereb shebang trên Windows với Apache 2?". Xem http://stackoverflow.com/questions/2036577/how-do-i-ignore-the-perl-shebang-on-windows-with-apache-2. – Tim
@Tim, trong khi Windows tự bỏ qua các shebang, các chương trình đang chạy trong Windows có thể nhìn thấy dòng đó - và cũng giống như điều đó xảy ra với trình soạn thảo văn bản do đó nó thực hiện cho một máy chủ web. Apache trên Windows thực hiện giải thích shebang riêng của nó - nhưng đối phó với đó là một vấn đề quản trị hệ thống về cấu hình apache, không có gì để làm với Python hoặc thực sự stackoverflow ở tất cả (đó là một câu hỏi serverfault). –