Frage : Perl unterdrücken Drucken, wenn es zum Rohr ausgegeben wird

Ich habe ein Perl-Programm geschrieben, um das Resultat zum Standardausgang (STDOUT), es auszudrucken bin Entdeckung, wenn es alleine, aber läuft, wenn ich den Ausgang von diesem Perl-Programm zu einem anderen Programm im OS-Niveau „Perl myprogram.pl leite | Grep-ABC“ etwas Ähnliches, der Ausgang des Perl-Programms scheint, an beide STDOUT sowie zum PIPE.

Actually durch zu gelangen meinem Perl-Programm ist so einfach wie unten: -
! #/usr/bin/perl

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

open (MYINPUTFILE,“ - „);
while ()
{
# gute Praxis, $ _ Wert because
# folgende Betriebe kann mein it.
ändern ($line) = $_;

# gute Praxis, das trailing
# Neuzeile vom line.
chomp ($line) immer abzustreifen;

 $lineNo++;

## Feld sequence
# log_name, Linie, $1 client_address, $2 rfc1413, user_name $3, local_time $4, Methode $5, URL $6, Protokoll $7, status_code $8, $9 bytes_sent, referrer $10, Mittel $11, $12 canon_name

wenn (/^ ([^] +) ([^] +) ([^] +) \ [([^] + [^ \]] +) \] \“ ([^] +) (. +) (\ w+ \/[^ \ „] +) \“ ([^] +) ([^] +) \ „(. *) \“ \ „(. *) \“ \ „(. *) \“ *$/) {
$bytes_sent = ($9== " - „)? 0: $9;
Druck $fileName,“ \ 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 ";
} sonst {
wenn (/^ ([^] +) ([^] +) ([^] +) \ [([^] + [^ \]] +) \] \ „([^] +) (. +) \“ ([^] +) ([^] +) \ „(. *) \“ \ „(. *) \“ \ „(. *) \“ *$/) {
$bytes_sent = ($8== " - „)? 0: $9;
Druck $fileName,“ \ 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 ";
} sonst {
Druck STDERR „\ tline $lineNo nicht Gleiches: $line“;
}
}
}

Which las es innen Apache kombiniertes Maschinenbordbuch von STDIN und Vorsprung den Ausgang zu STDOUT und drucke ab unsere Linien enthalte Störungen zu STDERR.

What kann grenze ich zwecks unterdrücke den Ausgang zu STDOUT, wenn ich den Ausgang zu einem anderen Programm über OS-Niveau leite?

BTW, die Störung tut auch nicht scheint, an STDERR zu gelangen wenn i-„Perl myprogram.pl | Grep-ABC 2> abc.err“, alle Störung geht auch zu STDOUT anstelle von STDERR und folglich ist das abc.err empty.

Antwort : Perl unterdrücken Drucken, wenn es zum Rohr ausgegeben wird

Da STDOUT zum Rohr geschickt wird, das erwartet würde.
STDERR normaly nur goed zum Anschluss.


zu sich IHR ourput zu abc.err verfangen, das Sie benötigen:
---8perl<---> myprogram.pl 2>abc.err | Grep-ABC
---8Otherwise<---> das stderr vom Grep wird zu abc.err geschickt, um sich das stderr in einer Akte auch zu verfangen, die Sie eine andere Akte benutzen und das später vermischen MÜSSEN.
Weitere Lösungen  
 
programming4us programming4us