2009-09-22 27 views
9

Có bất kỳ đảm bảo nào rằng mảng tên tệp được trả lại từ một cụm sao (ví dụ: <*>) sẽ được sắp xếp?Có đảm bảo rằng kết quả của globbing sẽ được sắp xếp trong Perl?

Tôi không thể tìm thấy cách sắp xếp được đề cập một cách hay cách khác in the documentation, nhưng có vẻ như trường hợp trong mọi thư mục tôi đã thử.

Tôi đang nói về việc sử dụng cú pháp sau:

@files = <*>; 

Nếu tôi cần các tập tin được sắp xếp, sẽ dưới đây là dư thừa?

@files = sort(<*>); 
+0

's/$ file/@ file /'? Toán tử glob và danh sách trả về hàm sắp xếp. – mob

+1

@mobrule cảm ơn, đã sửa. tôi làm hầu hết công việc của mình bằng PHP, trong đó $ được sử dụng trên tất cả các loại biến. : - [ – Kip

Trả lời

22

Trong Perl 5.6.0 và mới hơn, tên tập tin đều được sắp xếp:

Bắt đầu với v5.6.0, toán tử này được thực hiện bằng cách sử dụng tiêu chuẩn File :: Glob mở rộng.

- perldoc for glob

Theo mặc định, tên đường dẫn đều được sắp xếp trong thứ tự tăng dần ASCII.

- perldoc for File::Glob

Có một nhược điểm:

Theo mặc định, tên file được giả định là trường hợp nhạy cảm

- perldoc for File::Glob

Có nói tất cả điều đó, bạn có thể thay đổi b này ehavior để sắp xếp phân biệt chữ hoa chữ thường với

use File::Glob qw(:globally :nocase); 

Lưu ý rằng: toàn cầu dư thừa kể từ 5.6.0, nhưng điều này cũng sẽ hoạt động trên các phiên bản cũ hơn.

khác, nếu bạn chỉ muốn làm một glob duy nhất với trường hợp vô cảm:

use File::Glob ':glob'; 

@files = bsd_glob('*', GLOB_NOCASE); 
+2

cảm ơn, tôi đoán tôi đã không nhận thấy một chút về File :: Glob được sử dụng nội bộ bây giờ – Kip

Các vấn đề liên quan