Diese Frage wurde aus Faulheit von mir gemacht, weil ich Dutzende von Skripten habe, die in der einfachen Struktur ausgeführt werden:
%Vor%... und die Ausgabe wird auf stdout gedruckt. Jetzt erkenne ich jedoch, dass ich bestimmte Situationen habe, in denen ich gerne Eingaben in diese Skripte pumpen würde. So etwas in der Art:
%Vor%Kennt jemand eine Möglichkeit, dies zu tun, ohne alle meine Skripte neu zu programmieren, um stdin anstelle einer benutzerdefinierten Eingabedatei zu akzeptieren? Meine Skripte suchen den Dateinamen nach einer Anweisung wie dieser:
%Vor%Danke für Anregungen!
mpapec hat die einfachste Lösung geliefert. Ich möchte den Diamantoperator empfehlen: <>
.
In einem Skript, wo Sie
tun würden %Vor%Sie können den Diamond-Operator verwenden, um den Großteil dieses Codes zu ersetzen
%Vor% Der Dateiname lautet ARGV
, wenn Sie Argumentdateinamen verwenden, oder STDIN
, falls 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 Sie
tun %Vor%oder
%Vor%Der Diamantoperator nimmt die Eingabe gut.
Hinweis: Ihre open
-Anweisung ist gefährlich. Sie sollten drei Argumente mit explizitem Modus und lexikalischem Dateihandle verwenden. Die mit ihr verbundene die
-Anweisung sollte die Fehlervariable $!
enthalten, um Informationen darüber zu liefern, warum das Öffnen fehlgeschlagen ist.