Pergunta : o Perl suprime a impressão quando output à tubulação

Eu escrevi um programa do Perl para imprimir para fora o resultado à saída padrão (STDOUT), ele sou achado ao funcionar sozinho, mas quando eu conduzo a saída deste programa do Perl a um outro programa Perl myprogram.pl no nível do ósmio “ | o ABC do grep” qualquer outra coisa semelhante, a saída do programa do Perl parece começ completamente a ambos os STDOUT assim como programa do Perl de PIPE.

Actually a meu é tão simples quanto abaixo: -
! #/usr/bin/perl

lineNo = 0;
$fileName = $ARGV [0];

open (MYINPUTFILE,” - “);
do
while () {o
# boa prática armazenar o because
# operações subseqüentes pode mudar it.
meu ($line) = $_;

# boa prática descascar sempre o trailing
# newline do chomp de line.
($line);

 $lineNo++;log_name do sequence
# do campo do

##, linha, $1 client_address, $2 rfc1413, user_name $3, local_time $4, método $5, URL $6, protocolo $7, status_code $8, $9 bytes_sent, referrer $10, agente $11, $12 canon_name

se (/^ ([^] +) ([^] +) ([^] +) \ [([^] + [^ \]] +) \] \” ([^] +) (. +) \ (\ w+/[^ \ “] +) \” ([^] +) ([^] +) \ “(. *) \” \ “(. *) \” \ “(. *) \” *$/) {
$bytes_sent = ($9== " - “)? 0: $9; cópia $fileName do
,” \ t ", $lineNo, “\ t$1 \ t$2 \ t$3 \ t$4 \ t$5 \ t$6 \ t$7 \ t$8 \ t”, $bytes_sent,” \ t$10 \ t$11 \ t$12 \ n ";
} mais {
se (/^ ([^] +) ([^] +) ([^] +) \ [([^] + [^ \]] +) \] \ “([^] +) (. +) \” ([^] +) ([^] +) \ “(. *) \” \ “(. *) \” \ “(. *) \” *$/) {
$bytes_sent = ($8== " - “)? 0: $9; cópia $fileName do
,” \ t ", $lineNo, “\ t$1 \ t$2 \ t$3 \ t$4 \ t$5 \ t$6 \ t \ t$7 \ t”, $bytes_sent,” \ t$9 \ t$10 \ t$11 \ n ";
} mais {cópia STDERR do
“\ fósforo do tline $lineNo não: $line”; o

Which do
do
do
}}} leu dentro o registro combinado apache de STDIN e aba limito a saída a STDOUT e imprimo nossas linhas contenho erros a STDERR.

What posso eu suprimo a saída a STDOUT quando eu conduzo a saída a um outro programa no nível do ósmio? o

BTW, o erro igualmente não fizer parece começ a STDERR quando Perl myprogram.pl de I “ | o ABC 2> abc.err do grep”, todo o erro igualmente vai a STDOUT em vez de STDERR e assim o abc.err é empty.
class= do

Resposta : o Perl suprime a impressão quando output à tubulação

Porque STDOUT é emitido à tubulação que seria esperada.
STDERR goed normaly somente ao terminal.


para travar SEU ourput a abc.err que você precisa:
---8perl<---> myprogram.pl 2>abc.err | ABC do grep
---8Otherwise<---> o stderr do grep é emitido a abc.err para travar igualmente o stderr em uma lima que você PRECISA de usar uma lima diferente e de fundir mais tarde isso.
Outras soluções  
 
programming4us programming4us