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 ...
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.
Sie können eine Skalarvariable als Dateihandle behandeln, indem Sie open
dies tun:
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.
Meinst du sowas wie IO :: Scalar ? Ermöglicht das Schreiben in eine Variable mit Dateihandle-Semantik.
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.
Sie können File :: Tee verwenden, um ein Dateihandle zu teilen mehrere Ausgabeströme.
%Vor%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.
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