Редактировать: Мой первоначальный ответ был написан при условии, что отправленный код был кодом, который использовал ОП. Обновлено после исправления.
Вот что я получаю при запуске:
#!/usr/bin/perl
use strict; use warnings;
my @string = <STDIN>;
for (@string) {
if(/manu/) {
print "'$_'";
}
}
Выход:
E:\> t
manu
nana
tada
^Z
'manu
'
Обратите внимание на Control-Z , который я использую для сигнализации EOF из командной строки в Windows (если вы используете оболочку * nix, вы бы использовали Control-D ).
Вывод появляется только после того, как ваша программа прочитает все данные, которые она может прочитать из STDIN
.
Обратите внимание на перевод строки после manu
. Это потому, что я не chomp
ввода. Это единственная разница между использованием этого кода и использованием
chomp(my @string = <STDIN>)
Когда вы вначале присваиваете <STDIN>
массиву и перебираете его, ваша программа будет ждать, пока не останется больше данных для чтения и ее использование памяти будет пропорционально количеству полученных данных .
С другой стороны, следующая программа будет обрабатывать строки по мере их поступления:
/manu/ and print while <>;
и использование памяти будет пропорционально самой длинной полученной строке.
Строка выше эквивалентна:
while ( <> ) {
if ( /manu/ ) {
print $_;
}
}
Обратите внимание, что вы всегда должны добавлять use strict;
и его близкого друга use warnings;
в свои сценарии. См. Perldoc Strict .