2013-10-15 13 views
6

Nigdy nie sądziłem, że to możliwe, ale przeczytałem kilka sprzecznych komentarzy i pomyślałem, że zapytam ekspertów.Czy można wykryć, czy aktualna iteracja pętli jest ostatnią w perlu?

Jeśli przechodzę przez pętlę while, która czyta wiersz pliku po linii, czy istnieje sposób na wykonanie kodu, jeśli bieżąca iteracja będzie ostateczną iteracją w pętli? Rozumiem, że mógłbym po prostu umieścić ten kod natychmiast po pętli while, aby kod mógł zostać wykonany po ostatniej linii, ale zastanawiałem się, czy iteracja nie ma możliwości wykrycia jego położenia.

Dzięki!

+1

Zobacz Perl's [eof] (http://perldoc.perl.org/functions/eof.html). – Kenosis

+4

Zauważ także rozróżnienie między 'eof' i' eof() '- W pętli' while (<>) ', krótsza z nich może być prawdziwa wiele razy @ARGV ma wiele plików, a im dłużej zwraca true tylko raz. – vapace

+0

Świetne, dzięki za radę! – jake9115

Odpowiedz

6

W specjalnym przypadku, gdy czytasz z pliku, tak.

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

Co zrobić, jeśli nie czytasz ze STDIN lub pliku? –

+1

@HunterMcMillen, w ogólnym przypadku, w jaki sposób pętla będzie wiedzieć, że warunek będzie fałszywy, gdy następnym razem zostanie oceniony? – cjm

+0

@cjm Nie. To jest punkt wstępnego testu. –

4

Chociaż mogą istnieć pewne szczególne przypadki, w których możliwe jest ustalenie, że obecna iteracja jest ostatnia, to nie jest możliwe w przypadku ogólnym. Trywialny przykład:

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

Ponieważ nie można przewidzieć, co następny losowy numer będzie, to oczywiście nie jest możliwe, aby dowiedzieć się, czy dana iteracja będzie ostateczna iteracja.

Powiązane problemy