Thread print in datei und console (1 answers)
Opened by Rambo at 2005-05-15 20:20

coax
 2005-05-15 20:38
#54968 #54968
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Eine Loesung ist in diesen Thread win32::process, alles in log datei schreiben beschrieben.
edit: Nicht die performanteste Loesung in deinen Fall, vielleicht 'ne Tie::Handle-Klasse schreiben an die du dann *STDOUT tiest.

Eine andere Moeglichkeit waere, die Core-print-Funktion mit der eigenen zu ueberschreiben (was man ja eigentlich nicht tun muss/sollte), in der dann statt nur auf STDOUT auch in die Datei geschrieben wird.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/perl

package Tie::Handle::Duplicate;

 use strict;
 use warnings;

 use FileHandle;

 sub TIEHANDLE {
     my $class = shift;
     my $fname = shift;

     die "Second argument must be a filename!\n"
         unless defined $fname or $fname eq '';

     my $self = {};

     my $fh = new FileHandle;

     if ( $fh->open($fname, '>>') ) {
         $self->{'fh'} = $fh;
     } else {
         die "Can't open file in write mode: $!\n"; }

     return bless $self, $class;
 }
 
 sub PRINT {
     my $self = shift;
     $self->{'fh'}->print( @_ );
     print STDOUT @_;
 }

 sub PRINTF {
     my $self = shift;
     $self->{'fh'}->printf( @_ );
     printf STDOUT @_;
 }

package main;

 use strict;
 use warnings;

 tie *DUPOUT, 'Tie::Handle::Duplicate', $ENV{'HOME'} . '/tmp/logfile';

 select DUPOUT;

 printf "%s\n", 'hiho';

Das nur als anregender Beispielcode (der Package-Code ist keineswegs vollstaendig, er enthaelt nur das noetigste! ).
Ich bin der Meinung dafuer duerfte schon ein Modul existieren.

Ich hatte vor in der DESTROY-Methode noch das Filehandle aufzuraeumen, wie muesste der Code richtig lautet ?
Code: (dl )
  sub DESTROY { $_[0]->{'fh'}->close; }


Grusz Christian.\n\n

<!--EDIT|coax|1116181051-->
,,Das perlt aber heute wieder...'' -- Dittsche

View full thread print in datei und console