2015-03-06 6 views

ответ

1

Попробуйте это:

my $token; 
while (($token = readToken()) && (length($token) > 0)) { 
    # do stuff with $token 
} 
+0

@harmic изменил мой ответ – Jens

+0

Я рад, что ты писал, что, потому что это то, что я изначально пытался. С Perl 5.8.0 я получаю «токен» глобального символа «требуется токеновое имя пакета на тестовой строке 11. Выполнение теста прерывается из-за ошибок компиляции». – RedGrittyBrick

+0

@RedGrittyBrick изменили мой ответ. Пожалуйста, попробуйте еще раз. – Jens

3

Это как представляется, работает

while (length(my $token = readToken()) > 0) { 
    # do stuff with token 
} 
3

Ваш собственный ответ довольно хорош. Или вы можете написать бесконечный цикл и построить while логику вручную:

while() { 
    my $token = readToken(); 
    last if length($token) == 0; 
    # do stuff with $token 
} 
+0

[TIMTOWTDI] (http://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it) :) – RedGrittyBrick

-1

Ваш оригинальный цикл должен быть:

my $token = readToken(); 
while (length($token) > 0) { 
    # do stuff with $token 
}continue{ 
    $token = readToken(); 
} 

Разница в том, что ничего в пункте continue будет выполняться, когда next является называется. Чтобы пропустить continue, но повторите цикл, используйте redo.

См:

Смежные вопросы