2009-10-02 27 views
5

Hầu như phổ biến khi người ta gửi câu hỏi về SO (hoặc nơi khác) về Perl và đọc từ file, nếu bất kỳ mã có liên quan đến một kiểu cũ mởTôi có nên sử dụng một xử lý thư mục từ vựng với opendir trong Perl không?

open FH, ">file.txt" or die "Can't open for write, $!"; # OLD way, do not use! 

bị mắng vì đã không sử dụng một filehandle từ vựng. Như chúng ta đều biết,

open my $fh, ">", "file.txt" or die "Can't open for write, $!"; # new hotness 

là cách thích hợp để mở xử lý tệp trong Perl hiện đại. Điều gì về xử lý thư mục? Trong một vài câu hỏi SO gần đây, người ta đã đặt ra câu hỏi có liên quan đến opendir, và gửi mã như

opendir DIR, "/directory" or die "Can't get the directory, wtf?! $!"; # ??? 

Các perldoc pages hiển thị

opendir(my $dh, $some_dir) || die "can't opendir $some_dir: $!"; 

làm ví dụ.

Chúng tôi có nên đề xuất cho mọi người sử dụng một trình xử lý thư mục từ vựng cho opendir không?

+1

Sẽ rất tuyệt nếu 'while (readdir $ dir) {...}' hoạt động như 'while (readline $ file) {...}' –

+0

Trong trường hợp này, ví dụ perldoc * làm * làm điều đó "đúng", hãy nhớ rằng các ví dụ cần phải tập trung. Định kỳ, mọi người đề nghị đi qua và thêm các tuyên bố từ vựng hoặc nghiêm ngặt/cảnh báo vào các ví dụ; điều này phần lớn bị bắn hạ bởi vì nó thực sự che khuất điểm của mã ví dụ. Vì vậy, nếu ví dụ đã được opendir (DIRH, ...), đó sẽ không có được một cuộc tranh luận chống lại dirhandles từ vựng. – ysth

Trả lời

10

Chắc chắn. Đối số cho các tập tin từ vựng cho các thư mục giống hệt nhau đối với các tệp - phạm vi đến không gian tên hiện tại.

4

Có, từ vựng được ưu tiên cho opendir cũng như open.

3

Khi tôi có cơ hội, tôi sẽ sửa tất cả các ví dụ đó trong perldocs. Learning Perl đã sử dụng các điều khiển từ vựng trong ấn bản thứ năm.

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