
¿Cómo puedo canalizar una salida a la pantalla y otra salida seleccionada fuera del script Perl?
Respuesta1
Utilizando diferentes identificadores de archivos.
De forma predeterminada tendrás ambos STDOUT
y STDERR
. La print
función en Perl es muy breve para print STDOUT
.
En su terminal STDOUT
se le proporciona el identificador del archivo 1
y STDERR
se le proporciona el identificador del archivo 2
.
A continuación se muestra un ejemplo de cómo imprimir en cada identificador de archivo y redirigir cada uno a /dev/null.
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";'
foo
bar
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 1> /dev/null
bar
% perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 2> /dev/null
foo
- El primer comando imprime ambos.
- El segundo comando se descarta
STDOUT
y solo imprime.STDERR
- El tercer comando se desecha
STDERR
y sólo imprime.STDOUT
También puede declarar sus propios identificadores de archivos (por ejemplo, un archivo de registro) e imprimirlos en su lugar. Ver perldoc -f open
.
Respuesta2
probablemente quieras leer la documentación de perlipc, en particular la sección sobre Canalizaciones con nombre.
http://perldoc.perl.org/perlipc.html#Named-Pipes
perlipc: comunicación entre procesos de Perl (señales, fifos, tuberías, subprocesos seguros, sockets y semáforos)
Si necesita comunicación bidireccional (lectura y escritura) con un programa externo, entonces los módulos IPC::Open2 o IPC::Open3 (perl lib estándar, también documentado en la URL anterior) serán útiles.