Cuando se quiere capturar la salida de un programa utilizaremos las comillas hacia atrás (backquotes o backticks):
1 #!/usr/local/bin/perl5.8.0 -w 2 3 my $who = shift; 4 my $options = shift; 5 my $users = `who $options`; 6 7 until ($users =~ m/$who/) 8 { $users = `who $options`; } 9 10 print $users;Como muestra el ejemplo, la cadena entre backquotes se interpola igual que una cadena de comillas dobles.
Si se usan las backquotes en un contexto de lista se obtiene una lista cuyos elementos son las líneas de salida el programa. Veamos un ejemplo:
#!/usr/bin/perl -w my @user = `cat /etc/passwd`; my (@name, @uid); my $x; for ($i=0; $i < @user; $i++) { ($name[$i], $x, $uid[$i]) = split ':', $user[$i]; } @name = @name[ sort {$uid[$a] <=> $uid[$b]} 0..$#name ]; print "@name\n";
$/
?
Es posible recoger los contenidos de stderr
:
pp2@nereida:~/Lbook$ perl -wde 0 main::(-e:1): 0 DB<1> $x = `ls /tutu 2>&1` # stdout y stderr juntos DB<2> p $x ls: /tutu: No existe el fichero o el directorio DB<2> $y = `(echo 'Tutu'; ls /tutu) 2>&1 1>/dev/null` # Eliminar stdout DB<3> p $y ls: /tutu: No existe el fichero o el directorio
pp2@nereida:~/Lbook$ perl -wde 0 main::(-e:1): 0 DB<1> @a = 1..5 DB<2> p qx(echo @a) 1 2 3 4 5 DB<3> p qx'echo @a' @a¿Que ocurre cuando el delimitador de
qx
es la comilla simple?.
Consulte perldoc perlop
.