Gibt es eine Möglichkeit, die Druckausgabe einer Subroutine in eine Variable aufzunehmen, damit ich sie stattdessen an stderr senden kann?

8

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.

    
gravitas 17.05.2013, 18:01
quelle

3 Antworten

11

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.

%Vor%

Die Funktion select gibt das zuvor ausgewählte Dateihandle zurück, damit Sie es erfassen und später wiederherstellen können.

%Vor%     
mob 17.05.2013, 18:05
quelle
9

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

war

Verallgemeinert:

%Vor%     
pilcrow 17.05.2013 18:05
quelle
3

In der Zwischenzeit können Sie auch die Druckausgabe eines Unterprogramms auf eine Variable aufzeichnen.

Übergeben Sie einfach einen Skalarref an open :

%Vor%

Ausgabe:

%Vor%     
Julian Fondren 18.05.2013 02:44
quelle

Tags und Links