Код не печатает последний элемент массива при использовании CTRL + Z для завершения ввода STDIN - PullRequest
2 голосов
/ 22 июля 2011

Кажется, я столкнулся с особой проблемой.Вот код

#read a list of strings and print in 20-character column

print "Enter your strings:\n";
chomp(@list = <STDIN>);

foreach $_ (@list){
    printf "\n%20s", $_;
}

Код не печатает последний элемент массива, если я не нажму Enter до вызова конца файла CTRL + Z в Windows.

РЕДАКТИРОВАТЬ: Вот пример вывода

Enter your strings:
a
v
b
                   a
                   v

здесь я нажал Ctrl-Z после ввода b и перед нажатием enter, и он не печатал b.Если бы я нажал Enter, тогда Ctrl-Z вывел бы b.

1 Ответ

1 голос
/ 22 июля 2011

STDOUT буферизуется при входе в терминал; данные на самом деле не отображаются, пока вы не добавите новую строку. Попробуйте:

print "Enter your strings:\n";
chomp(@list = <STDIN>);
print "\n";
foreach $_ (@list){
    printf "%20s\n", $_;
}

или добавление $| = 1; перед циклом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...