ubuntuusers.de

Eine Frage zu "print" in Perl

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

CuSith

Avatar von CuSith

Anmeldungsdatum:
7. Dezember 2007

Beiträge: 134

Wohnort: Hamburg

Hej zusammen!

Ich stoße gerade auf folgendes Problem, bei dem mir (bis jetzt) auch Google nicht weiterhelfen konnte:

In einem Perl Script habe ich immer wieder lange Blöcke von print-Anweisungen, die ich sowohl in STDOUT als auch einer Datei ausgeben möchte.

Mit

1
2
3
print "sinnvoller Text";
# entspricht ja:  print STDOUT "sinnvoller Text";
print OUTPUT_FILE "sinnvoller Text";

ist die Ausgabe zwar kein Problem, aber der Code wird massiv verlängert da ja jede Befehlszeile doppelt vorkommen muss.

Gibt es eine Möglichkeit mit einem Printbefehl sowohl nach STDOUT als auch in das File zu schreiben?

THNX BO

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Implementiere doch einfach eine Funktion namens status() oder log() (oder irgendein anderer sinnvoller Name), welche die Meldung entsprechend auf die Standardausgabe und in die Datei schreibt. Oder noch besser, du könntest eine vernünftige Logging-Bibliothek nutzen, z.B. Log4Perl und diese entsprechend konfigurieren.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

CuSith schrieb:

In einem Perl Script habe ich immer wieder lange Blöcke von print-Anweisungen, die ich sowohl in STDOUT als auch einer Datei ausgeben möchte.

Wenn das nicht nur fast alle, sondern alle Ausgaben betrifft, machst Du es am besten mit tee.

perl foobar.pl | tee foobar.log

würde alle Ausgaben anzeigen und ins Logfile schreiben. Aber eben alle.

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

1
2
3
4
sub printall {
    print $@;
    print $OUTPUT_FILE $@;
}

Oder so 😀

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Lieber so:

1
2
3
4
5
sub tee {
    my ( $fh, @lines ) = @_;
    print @lines;
    print {$fh} @lines;
}

dann kann man den filehandle übergeben in welche datei man es schreiben möchte und er gibt es immer STDOUT aus (Anstatt eine Globale variable zu nehmen, *pfui*). Aber insgesamt hört sich das eher nach Logging an. Und das bereits genannte Log::Log4perl sollte man sich eher anschauen.

CuSith

(Themenstarter)
Avatar von CuSith

Anmeldungsdatum:
7. Dezember 2007

Beiträge: 134

Wohnort: Hamburg

Danke!

Das mit dem Log4Perl sieht sehr interessant aus - hier hat aber die Idee mit der einfachen Funktion total gereicht.

THNX BO

Antworten |