Estoy tratando de escribir una secuencia de comandos de Perl que lea los datos canalizados, luego solicita al usuario que ingrese en función de esos datos. La siguiente secuencia de comandos, prompt_for_action
, es lo que yo estoy tratando de hacer:¿Puedo solicitar la entrada del usuario después de leer la entrada canalizada en STDIN en Perl?
#!/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";
}
pero cuando lo ejecuto no hay que esperar la entrada del usuario, sólo se sopla a través sin esperar a que yo escribo:
$ 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 ``.
Si no leo mis datos de la entrada estándar ...
#!/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";
}
entonces la escritura funciona bien:
$ ./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`.
¿Está conectado a STDIN y luego solicita la entrada del usuario? ¿Si es así, cómo?
Es increíble lo bueno que es Perl para romper los sistemas de resaltado de sintaxis. – sidyll