2012-08-06 22 views
8
while(<@thisArray>) 

Có ai biết điều này sẽ làm chính xác không? Chúng tôi đã chỉ có một cuộc thảo luận về nó vì nó là mã thường là một cái gì đó như:trong khi (<@array>) hiệu ứng cho perl

while(<STDIN>) 
+0

Nó không phải làm bất cứ điều gì vì '@ mảng' không phải là tên tệp, đó là tên của một mảng. – SexyBeast

Trả lời

6

<@thisArray> công trình như glob(@thisArray). Vì vậy, nó cung cấp cho một danh sách tất cả các tập tin phù hợp với các thành viên của mảng.

Nếu phần tử của mảng không khớp với tệp, bản thân phần tử được trả lại.

10

Nó sẽ lặp qua tên tệp được khớp với mẫu trong @thisArray.

Kết quả perl -MO=Deparse -e '1 while(<@thisArray>)' cho thấy <> được chuyển thành glob:

use File::Glob(); 
'???' while defined($_ = glob(join($", @thisArray))); 

Từ glob dẫn sử dụng:

Trong bối cảnh vô hướng, lặp glob thông qua mở rộng tên tập tin như vậy, trở về undef khi danh sách được kiệt sức .

Giá trị mặc định cho $" là không gian, do đó nhiều mô hình từ @thisArray sẽ được tham gia vào chuỗi đơn và sau đó tách ra trở lại bởi không gian bên trong glob:

Lưu ý rằng glob chia đối số của nó vào khoảng trắng và xử lý mỗi phân đoạn dưới dạng mẫu riêng biệt.

+0

Cảm ơn rất nhiều. Tôi đã sử dụng nó để đếm vì vậy số lượng sẽ là cách tắt. – Psyllex

5

Xem perlop:

Nếu những gì trong dấu ngoặc nhọn được không phải là một filehandle hay một biến vô hướng đơn giản có chứa một tên filehandle, typeglob, hoặc tham khảo typeglob, nó được xem như là một mô hình filename được được chia nhỏ

+1

+1 cho liên kết perlop – DVK

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