Perl canalizando alguns fora do script e outros para a tela

Perl canalizando alguns fora do script e outros para a tela

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 STDOUTe STDERR. A printfunção em Perl é realmente uma abreviação de print STDOUT.

No seu terminal STDOUTé fornecido o identificador de arquivo 1e STDERRo 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 STDOUTe imprime apenasSTDERR
  • O terceiro comando joga fora STDERRe 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.

informação relacionada