Vraag : perl onderdruk druk wanneer output aan pijp

Ik heb een perlprogramma geschreven om het resultaat aan standaardoutput (STDOUT) uit te printen, is het vondst wanneer alleen het lopen, maar wanneer ik de output van dit perlprogramma aan een ander programma in OS niveau „perl myprogram.pl door buizen leid | grep abc“ iets in die aard, de output van het perlprogramma schijnt om zowel STDOUT evenals aan PIPE.

Actually te bereiken mijn perlprogramma zoals hieronder zo eenvoudig is: -
! #/usr/bin/perl

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

open (MYINPUTFILE,“ - „);
while ()
{
# Goede praktijk om $ _ op te slaan koers because
# verdere verrichtingen kan mijn it.
veranderen ($line) = $_;

# Goede praktijk van trailing
# newline van line.
altijd om te ontdoen chomp ($line);

 $lineNo++;

## Gebied sequence
# log_name, lijn, $1 client_address, $2 rfc1413, user_name $3, local_time $4, methode $5, url $6, protocol $7, status_code $8, referrer bytes_sent $9, $10, agent $11, $12 canon_name

als (/^ ([^] +) ([^] +) ([^] +) \ [([^] + [^ \]] +) \] \“ ([^] +) (. +) (\ 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 ";
} anders {
als (/^ ([^] +) ([^] +) ([^] +) \ [([^] + [^ \]] +) \] \ „([^] +) (. +) \“ ([^] +) ([^] +) \ „(. *) \“ \ „(. *) \“ \ „(. *) \“ *$/) {
$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 ";
} anders {
de gelijke van drukSTDERR „\ tline $lineNo niet: $line“;
}
}
}

Which het in apache gecombineerd logboek van STDIN las en bakent drukt het lusje de output aan af STDOUT en onze lijnen bevat fouten aan STDERR.

What kan ik om onderdrukt de output aan STDOUT wanneer ik de output aan een ander programma over OS niveau door buizen leid?

BTW, de fout niet ook schijnt om aan STDERR te krijgen wanneer I „perl myprogram.pl | grep abc 2> abc.err“, al fout gaat ook naar STDOUT in plaats van STDERR en zo is abc.err empty.

Antwoord : perl onderdruk druk wanneer output aan pijp

Aangezien STDOUT wordt verzonden naar de pijp die worden verwacht.
STDERR goed normaly slechts aan de terminal.


om UW ourput aan abc.err te vangen u wenst:
---8perl<---> myprogram.pl 2>abc.err | grep abc
---8Otherwise<---> stderr van grep wordt verzonden naar abc.err om stderr in een dossier ook te vangen u een verschillend dossier MOET gebruiken en dat later samenvoegen.
Andere oplossingen  
 
programming4us programming4us