Questione : il Perl sopprime la stampa una volta prodotto al tubo

Ho scritto un programma del Perl per stampare fuori il risultato ad uscita standard (STDOUT), esso sono ritrovamento quando funziona da solo, ma quando convoglio l'uscita da questo programma del Perl ad un altro programma Perl myprogram.pl nel livello di OS “ | il ABC di grep„ qualcosa di simile, l'uscita del programma del Perl sembra ottenere attraverso ad entrambi gli STDOUT così come al mio programma del Perl di PIPE.

Actually è semplice quanto qui sotto: -
! #/usr/bin/perl

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

open (MYINPUTFILE,„ - “);
del
while () {
# buona pratica memorizzare il because
# funzionamenti successivi può cambiare it.
mio ($line) = $_;

# buona pratica mettere a nudo sempre il trailing
# nuova linea dal chomp di line.
($line);

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

##, linea, $1 client_address, $2 rfc1413, user_name $3, local_time $4, metodo $5, URL $6, protocollo $7, status_code $8, $9 bytes_sent, referrer $10, agente $11, $12 canon_name

se (/^ ([^] +) ([^] +) ([^] +) \ [([^] + [^ \]] +) \] \„ ([^] +) (. +) \/[(\ w+ ^ \ “] +) \„ ([^] +) ([^] +) \ “(. *) \„ \ “(. *) \„ \ “(. *) \„ *$/) {
$bytes_sent = ($9== " - “)? 0: $9; stampa $fileName,„ \ t " del
, $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 ";
} altrimenti {
se (/^ ([^] +) ([^] +) ([^] +) \ [([^] + [^ \]] +) \] \ “([^] +) (. +) \„ ([^] +) ([^] +) \ “(. *) \„ \ “(. *) \„ \ “(. *) \„ *$/) {
$bytes_sent = ($8== " - “)? 0: $9; stampa $fileName,„ \ t " del
, $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 ";
} altrimenti {stampa STDERR del
“\ fiammifero di tline $lineNo non: $line„;

Which del
del
del
}}} ha letto dentro il ceppo unito apache da STDIN e linguetta delimito l'uscita a STDOUT e stampo le nostre linee contengo gli errori a STDERR.

What posso per sopprimo l'uscita a STDOUT quando convoglio l'uscita ad un altro programma al livello di OS? il

BTW, l'errore inoltre non fa sembra ottenere a STDERR quando Perl myprogram.pl di I “ | il ABC 2> abc.err di grep„, tutto l'errore inoltre va a STDOUT anziché STDERR e il abc.err è così empty.
class= del

Risposta : il Perl sopprime la stampa una volta prodotto al tubo

Poichè STDOUT è trasmesso al tubo che sarebbe preveduto.
STDERR goed normaly soltanto al terminale.


per per interferire il VOSTRO ourput a abc.err che avete bisogno di:
---8perl<---> myprogram.pl 2>abc.err | ABC di grep
---8Otherwise<---> lo stderr dal grep è trasmesso a abc.err per interferire lo stderr anche in una lima che DOVETE usare una lima differente e fondere più successivamente quello.
Altre soluzioni  
 
programming4us programming4us