2013-10-18 2 views
8

Diese Frage wurde aus Faulheit meinerseits notwendig, weil ich Dutzende von Skripten, die in der einfachen Struktur ausgeführt werden:Wie stdin in ein Perl-Skript pipen, das nach Eingabe als einzigem Parameter sucht?

perl my_script.pl my_input_file 

... und die Ausgabe gedruckt wird auf der Standardausgabe. Jetzt erkenne ich jedoch, dass ich bestimmte Situationen habe, in denen ich gerne Eingaben in diese Skripte pumpen würde. So etwas wie folgt aus:

perl my_script.pl my_input_file | perl my_next_script.pl | perl third_script.pl > output 

Kennt jemand eine Möglichkeit, dies zu tun, ohne alle meine Skripte Umkodierung stdin anstelle einer benutzerdefinierten Eingabedatei zu akzeptieren? Meine Skripte suchen Sie nach dem Dateinamen durch eine Anweisung wie folgt:

open(INPUT,$ARGV[0]) || die("Can't open the input file"); 

Dank für Ihre Anregungen!

Antwort

12

Verwenden - als Dateiname

perl my_script.pl my_input_file | perl my_next_script.pl - | perl third_script.pl - > output 
7

mpapec hat die einfachste Lösung zur Verfügung gestellt. Ich möchte den Diamantenoperator empfehlen: <>.

In einem Skript, in dem Sie

open my $fh, "<", $ARGV[0] or die $!; 
while (<$fh>) { 
    ... 

Sie können die Diamant verwenden Betreiber die meisten dieser Code

wird
while (<>) { 
    ... 

Der Datei-Handle zu ersetzen Namen ARGV, wenn Sie Dateinamen verwenden Argument tun würde oder STDIN wenn nicht. Der Dateiname wird in $ARGV gefunden.

Dieser Operator ruft ein Verhalten auf, bei dem Perl nach Eingaben entweder aus Dateinamenargumenten oder aus der Standardeingabe sucht.

Was bedeutet, dass, ob Sie tun

inputpipe | script.pl 

oder

script.pl inputfile.txt 

Der Diamant Bediener den Eingang ganz gut brauchen.

Hinweis: Ihre open Erklärung ist gefährlich. Sie sollten drei Argumente mit explizitem Modus und lexikalischem Dateihandle verwenden. Die mit ihm verbundene die-Anweisung sollte die Fehlervariable $! enthalten, um Informationen darüber zu liefern, warum das Öffnen fehlgeschlagen ist.

Verwandte Themen