Angenommen, wir haben:
%Vor%Wenn es einen Fall gibt, in dem ich es stderr anstelle von stdout drucken lassen möchte, gibt es eine Möglichkeit, die Subroutine dazu aufzurufen, dies zu tun? Oder kann ich die Ausgabe auf eine Variable erfassen und dann warnen? Ich bin ziemlich neu in Perl.
Ja, es gibt. print
sendet seine Ausgabe an das "ausgewählte" Dateihandle, was normalerweise STDOUT
ist. Perl stellt jedoch die Funktion select
zur Verfügung, damit Sie sie ändern können.
Die Funktion select
gibt das zuvor ausgewählte Dateihandle zurück, damit Sie es erfassen und später wiederherstellen können.
Perls dynamisches Scoping über local () wird nicht oft verwendet, aber dies erscheint mir als eine gute Anwendung für es:
%Vor% Der Aufruf von test()
im obigen Block - sowie von allem, was test()
selbst aufrufen könnte - hat STDOUT dynamisch auf Ihr Duplikat von STDERR beschränkt. Wenn die Steuerung den Block verlässt, selbst wenn durch die()
ing, wird STDOUT auf das wiederhergestellt, was vor dem Block
Verallgemeinert:
%Vor%In der Zwischenzeit können Sie auch die Druckausgabe eines Unterprogramms auf eine Variable aufzeichnen.
Übergeben Sie einfach einen Skalarref an open
:
Ausgabe:
%Vor%