Wie kann ich in Perl statt in einer Datei auf eine Variable drucken?

7

Wie kann ich mit Perl eine Variable ausgeben?

Ich habe eine Weile an einem Programm gearbeitet, das seinen iterativen Fortschritt auf sehr ausführliche Weise protokolliert ...

%Vor%

Ich möchte jedoch auch einige der Nachrichten selektiv in eine andere Datei drucken. Natürlich könnte ich den Code mit ... streuen ...

%Vor%

Oder schreiben Sie das ganze Geschäft in eine Funktion um. Blah.

Was ich tun möchte, ist etwas Zauberei, wenn ich das $ loghandle öffne, so dass, wenn ich print 'bin, ich gerade eine Operation sprintf ish gegen eine Variable mache (nennen Sie es $current_iteration ), so dass ich, wenn ich zu einem Entscheidungspunkt komme, so etwas tun kann ...

%Vor%

Ich bin mir ziemlich sicher, dass ich irgendwo so etwas gesehen habe, aber ich habe keine Ahnung, wo es ist oder wo ich es suchen soll.

edit: File :: Tee löst dieses Problem zu einem gewissen Grad auf * nix, aber ich laufe auf Windows.

    
Paul Nathan 08.10.2009, 23:27
quelle

7 Antworten

18

Sie können eine Skalarvariable als Dateihandle behandeln, indem Sie open dies tun:

%Vor%

Sie können stdout oder stderr sogar einem Skalar zuordnen:

%Vor%

Wenn Sie Ihre Ausgabe teilen oder eine Konfigurationsdatei erstellen möchten, um "interessante" Dinge mit Ihrer Protokollierung zu tun, sind Sie besser mit Log4Perl wie andere vorgeschlagen haben.

    
Ether 08.10.2009, 00:17
quelle
5

Meinst du sowas wie IO :: Scalar ? Ermöglicht das Schreiben in eine Variable mit Dateihandle-Semantik.

    
Andrew Barnett 07.10.2009 21:54
quelle
4

Wenn Sie eine selektive Protokollierung durchführen möchten, bei der Sie steuern können, welche Nachrichten protokolliert werden und wo sie protokolliert werden, verwenden Sie Log :: Log4perl . Das wird Ihnen eine Menge Zeit ersparen, wenn Sie mit tie s und anderer schwarzer Magie herumspielen.

    
brian d foy 08.10.2009 02:53
quelle
2

Sie können File :: Tee verwenden, um ein Dateihandle zu teilen mehrere Ausgabeströme.

%Vor%     
friedo 07.10.2009 21:23
quelle
2

Perlfaq5 empfiehlt Tie :: FileHandle :: Multiplex zum Drucken in mehrere Dateien.

Die Quelle ist sehr einfach und sollte leicht mit einem pro-handle-Filter geändert werden können.

    
daotoad 07.10.2009 21:34
quelle
1

Klingt so, als ob Sie tie Ihr Dateihandle

möchten %Vor%     
mob 07.10.2009 21:26
quelle
1

Dies ist ein enormer Hack, und ich denke, dass mobrules Lösung oder (esp) Sinans Lösung von Log4Perl der Weg ist, wenn ich Zeit habe.

Aber das ist was ich verwende, als Abschlussding:

%Vor%

Bearbeiten:

Da dies Community-Wiki ist, ist es nichts wert, dass Perl Argumente für Funktionen aliasiert. Das heißt, Sie können dies einfach schreiben:

%Vor%

Und dann sag:

%Vor%

Das ist kein besonders großer Hack, obwohl print_to_var viel mehr tippt als . ist.

Und hier ist die HELO KITTIE:

helo kittie http://blogs.philadelphiaweekly.com/style/files /2008/11/hello-kitty-color.gif

    
Paul Nathan 08.10.2009 05:06
quelle

Tags und Links