
Como canalizo alguma saída para a tela e alguma outra saída selecionada, fora do script Perl?
Responder1
Usando diferentes identificadores de arquivo.
Por padrão, você terá ambos STDOUT
e STDERR
. A print
função em Perl é realmente uma abreviação de print STDOUT
.
No seu terminal STDOUT
é fornecido o identificador de arquivo 1
e STDERR
o identificador de arquivo 2
.
Aqui está um exemplo de impressão para cada identificador de arquivo e redirecionamento de cada um para/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
- O primeiro comando imprime ambos.
- O segundo comando joga fora
STDOUT
e imprime apenasSTDERR
- O terceiro comando joga fora
STDERR
e imprime apenasSTDOUT
Você também pode declarar seus próprios identificadores de arquivo (por exemplo, um arquivo de log) e imprimir nele. Ver perldoc -f open
.
Responder2
você provavelmente deseja ler a documentação do perlipc, em particular a seção sobre Named Pipes.
http://perldoc.perl.org/perlipc.html#Named-Pipes
perlipc - comunicação entre processos Perl (sinais, fifos, pipes, subprocessos seguros, soquetes e semáforos)
Se você precisar de comunicação bidirecional (leitura e gravação) com um programa externo, então os módulos IPC::Open2 ou IPC::Open3 (lib perl padrão, também documentada na URL acima) serão úteis.