I pisać perl program myprogram.pl the rezultat standardowy wydajność (STDOUT), ono być znalezisko gdy biegać samotnie, ale gdy I piszczeć the wydajność od ten perl program inny program w OS poziom "perl myprogram.pl | grep abc" lubić lubić lubić, the wydajność the perl program wydawać się oba STDOUT zarówno jak i the PIPE.
Actually mój perl program być równie prosty prosty: - ! #/usr/bin/perl
lineNo = (0); $fileName = $ARGV [(0)];
open (MYINPUTFILE," - "); while () { # Dobra praktyka $ _ wartość because # natępny operacja móc it. mój ($line) = $_;
# Dobra praktyka zawsze the trailing # newline od the line. chomp ($line);
$lineNo++;
## Śródpolny sequence # log_name, linia, $1 client_address, $2 rfc1413, $3 user_name, $4 local_time, $5 metoda, $6 url, $7 protokół, $8 status_code, $9 bytes_sent, $10 referrer, $11 agent, $12 canon_name
jeżeli (/^ ([^] +) ([^] +) ([^] +) \ [([^] + [^ \]] +) \] \" ([^] +) (. +) (\ w+ \/[^ \ "] +) \" ([^] +) ([^] +) \ "(. *) \" \ "(. *) \" \ "(. *) \" *$/) { $bytes_sent = ($9== " - ")? (0): $9; druk $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 "; } inny { jeżeli (/^ ([^] +) ([^] +) ([^] +) \ [([^] + [^ \]] +) \] \ "([^] +) (. +) \" ([^] +) ([^] +) \ "(. *) \" \ "(. *) \" \ "(. *) \" *$/) { $bytes_sent = ($8== " - ")? (0): $9; druk $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 "; } inny { druk STDERR "\ tline $lineNo zapałczany: $line"; } } }
Which ono czytać wewnątrz apasz łączyć bela od STDIN i zakładka rozgraniczać the wydajność STDOUT i drukować nasz linia zawierać błąd STDERR.
What móc I tłumić the wydajność STDOUT gdy I piszczeć the wydajność inny program na OS poziom?
BTW, the błąd także wydawać się STDERR gdy I "perl myprogram.pl | grep abc 2> abc.err", wszystkie błąd także iść STDOUT zamiast STDERR i tak the abc.err być empty.
|