Автоматическое закрытие потока stdin, когда пользователь нажимает Ctrl-D, не то, что Perl 6 делает на принимающей стороне потока - это то, что драйвер терминала Unix делает на его конец. Таким образом, у вас будет такая же проблема на всех других языках программирования.
Я не думаю, что вы можете попросить терминал повторно открыть поток stdin после его закрытия.
Однако, вы можете поручить терминалу временно отключить его поведение автоматической обработки управляющих символов, как Ctrl + D по умолчанию (так называемый «Cooked mode„), и вместо того, чтобы использовать“Raw режим», в котором персонаж СРВ будет быть переданным вашей программе как есть, между прочим. Затем ваша программа может решить, как интерпретировать этот символ.
Один из способов проинструктировать терминал для входа в необработанный режим, это API termios, привязки Perl 6, для которых предусмотрен модуль Term::termios. (Использование метода .makeraw
, продемонстрированного в модуле README.)
Отлично! Благодарю вас! Вы всегда были полезны! – lisprogtor