Schrift
[thread]6995[/thread]

print in datei und console



<< >> 2 Einträge, 1 Seite
Rambo
 2005-05-15 20:20
#54967 #54967
User since
2003-08-14
803 Artikel
BenutzerIn

user image
Hallo,

wie kann ich es erreichen das ein print befehl nicht nur in die
datei geschrieben wird sonder auch in der console erscheint
ohne den befehl 2 mal zu schreiben?
Code: (dl )
1
2
print FH "hallo";
print "hallo";


geht das?

fürti rambo
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
<< >> 2 Einträge, 1 Seite



View all threads created 2005-05-15 20:20.