Можно ли в Perl запросить ввод пользователя после чтения данных, переданных по трубопроводу на STDIN?

Я пытаюсь написать сценарий perl, который читает данные, переданные по трубопроводу, а затем запрашивает у пользователя ввод на основе этих данных. Следующий скрипт, prompt_for_action, это то, что я пытаюсь сделать:

#!/usr/bin/perl 

my @hosts = ();
while (<>) {
    my $host = $_;
    $host =~ s/\n//; # strip newlines
    push(@hosts, $host);
}

for my $host (@hosts) {
    print "Do you want to do x with $host ? y/n: ";
    chomp(my $answer = <>);
    print "You said `$answer`.\n";
}

но когда я запускаю его, нет ожидания ввода пользователя, он просто проходит, не дожидаясь, пока я наберу:

$ echo "test1.example.com
> test2.example.com" | ./prompt_for_action
Do you want to do x with test1.example.com ? y/n: You said ``.
Do you want to do x with test2.example.com ? y/n: You said ``.

Если я не читаю данные из STDIN...

#!/usr/bin/perl 

my @hosts = ('test1.example.com', 'test12.example.com');

for my $host (@hosts) {
    print "Do you want to do x with $host ? y/n: ";
    chomp(my $answer = <>);
    print "You said `$answer`.\n";
}

то скрипт работает нормально:

$ ./prompt_for_action 
Do you want to do x with test1.example.com ? y/n: y
You said `y`.
Do you want to do x with test12.example.com ? y/n: n
You said `n`.

Возможно ли передать данные в STDIN, а затем запросить ввод пользователя? Если да, то как?

12
задан Adam Franco 28 February 2012 в 15:09
поделиться