В моем скрипте Perl у меня есть двойной бесконечный цикл while. Я читаю строки из файла с оператором diamond. Но каким-то образом, если мой скрипт достигает последней строки файла, он не возвращает undef, а зависает навсегда.
Если я уменьшу код до одного цикла while, этого не произойдет. Поэтому мне интересно, делаю ли я что-то не так или это известное ограничение языка. (На самом деле это мой первый Perl-скрипт.)
Ниже мой сценарий. Он предназначен для подсчета размера последовательностей ДНК в файлах fasta, но поведение зависания можно наблюдать с любым другим файлом с несколькими строками текста.
Версия Perl 5.18.2
Вызывается из командной строки, как perl script.pl file.fa
$l = <>;
while (1) {
$N = 0;
while (1) {
print "Get line";
$l = <>;
print "Got line";
if (not($l)) {
last;
}
if ($l =~ /^>/) {
last;
}
$N += length($l);
}
print $N;
if (not($N)) {
last;
}
}
Я поместил некоторые отладочные операторы печати, чтобы вы могли видеть, что последней напечатанной строкой является «Получить строку», а затем она зависает.