Я пытаюсь написать 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, а затем запросить ввод пользователя? Если так, то как?