Оператор печати Perl's допускает пропуск LIST во всех случаях. Рассмотрим:
$ perl -le '$_ = "foo!"; print STDOUT'
foo!
Но для парсера это выглядит как файловый дескриптор - в отличие от print $scalar
, который может быть чем угодно во время выполнения. Если вы не уверены в синтаксическом разборе кода, введите его через B :: Deparse , как в
$ perl -MO=Deparse,-p try
while (defined(($_ = <READ>))) {
print($_);
print($handle);
print(STDOUT $_);
}
Как написано, цикл содержит три вызова для печати: print
, print $handle
и print STDOUT
.
Чтобы приблизиться к тому, что вы хотите, вы можете использовать выберите :
my $oldfh = select $handle;
while(<READ>)
{
print;
}
select $oldfh;
Обратите внимание, что select возвращает ранее выбранный дескриптор файла, а приведенный выше код сохраняет его, чтобы вернуть вещи туда, где мы их нашли позже.