2013-10-15 23 views
6

Tôi chưa bao giờ nghĩ rằng điều này là có thể, nhưng đọc một số nhận xét mâu thuẫn và nghĩ rằng tôi sẽ hỏi các chuyên gia.Có thể phát hiện xem vòng lặp lặp lại trong khi lặp lại là lần cuối cùng trong perl không?

Nếu tôi đang tiến hành thông qua một vòng lặp while đang đọc từng dòng tệp, có cách nào để thực thi một số mã nếu lặp lại hiện tại sẽ là lần lặp cuối cùng trong vòng lặp không? Tôi hiểu rằng tôi có thể chỉ cần đặt mã này ngay lập tức sau vòng lặp while, do đó mã sẽ thực thi sau dòng cuối cùng, nhưng tôi chỉ tự hỏi nếu lặp lại có bất kỳ cách nào phát hiện vị trí của nó.

Cảm ơn!

+1

Xem [eof] của Perl (http://perldoc.perl.org/functions/eof.html). – Kenosis

+4

Cũng lưu ý sự khác biệt giữa 'eof' và' eof() '- Trong một vòng lặp' while (<>) ', vòng lặp ngắn hơn có thể đúng nhiều lần @ARGV có nhiều tệp và một tệp dài hơn chỉ trả về đúng một lần. – vapace

+0

Tuyệt vời, cảm ơn lời khuyên! – jake9115

Trả lời

6

Trong trường hợp đặc biệt mà bạn đang đọc từ tệp, có.

while(<>) { 
    if(eof) { 
     print "The last line of the file!\n"; 
    } 
} 
+0

Nếu bạn không đọc từ STDIN hoặc tệp thì sao? –

+1

@HunterMcMillen, trong trường hợp chung, làm thế nào để vòng lặp biết rằng điều kiện sẽ là sai trong lần tiếp theo nó được đánh giá? – cjm

+0

@cjm Bạn không biết. Đó là điểm của thử nghiệm trước. –

4

Trong trường hợp có thể có một số trường hợp đặc biệt, trong đó có thể xác định rằng lần lặp hiện tại là lần cuối cùng, không thể xảy ra trong trường hợp chung. Một ví dụ tầm thường:

while (rand() < 0.99) { 
    print "Hasn't ended yet\n"; 
} 

Vì không thể dự đoán số ngẫu nhiên tiếp theo sẽ là gì, rõ ràng là không thể biết liệu bất kỳ lần lặp lại nào sẽ là lần lặp cuối cùng.

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