2016-12-25 1 views
2

Мне нужно ввести несколько ЗДЕСЬ-DOC. В моих кодах есть 2 цикла. Внутренний цикл используется для получения многострочного здесь-doc. Но после того, как я введу Control-D, чтобы завершить один здесь-doc, внутренний цикл while не запускается снова, а внешний цикл работает бесконечно. Каков наилучший способ исправить это?

while True { 
    my $y = ""; 
    my $x = 32; 
    while $x=$*IN.getc { 
     $y = $y ~ $x; 
    } 
    say "=========="; 
    say "[$y]"; sleep 2; 
} 

Почему $ x продолжает быть EOF даже после того, как я сброшу $ x на 32? Почему EOF застрял в $ * IN? Спасибо за помощь.

ответ

2

Когда вы нажимаете Ctrl + D, терминал закрывает поток stdin на своем конце, а затем, когда Perl 6 пытается продолжить чтение, он всегда получает EOF.

В вашей программе это приведет к завершению цикла while. Затем вы устанавливаете $x на 32, но при следующем запуске внутреннего цикла while$x = $*IN.getc сразу же устанавливает его на Nil, потому что поток по-прежнему закрыт.

+0

Хорошо, я понял. Я решил проблему, избегая Ctrl-D все вместе. Еще раз спасибо smls !! – lisprogtor

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