Thread Log::Handler: binmode, utf8 (17 answers)
Opened by bloonix at 2007-06-15 14:51

sid burn
 2007-06-16 17:52
#77557 #77557
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=opi,15.June.2007, 22:23]hier ein simples Beispiel:

Code: (dl )
1
2
3
4
open my $fh, '>', 'file.log' or die $!;
print $fh "hello world\n" or die $!;
system('rm -f file.log && touch file.log');
print $fh "hello world\n" or die $!;


Das 2. print funktioniert natürlich nicht, da es nicht mehr die gleiche
Datei ist. Im Log::Handler gibt es die Option reopen. Mit dieser Option
prüfe ich vor jeder Schreiboperation die Inode und wenn sie sich geändert
hat, dann öffne ich die Datei neu. Auf Windows geht das leider nicht.

Wie kann ich sicherstellen, das das Filehandle zur Datei "passt"?[/quote]
Also erstens Funktioniert das Skript. Und zweitens hast du anscheind nicht verstanden wie Unix Dateien verwaltet. :p

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
use warnings;
use strict;

open my $fh, '+>', 'file.log' or die $!;
print $fh "Hallo, Welt!\n" or die $!;
system('rm -f file.log && touch file.log');
print $fh "Hallo, Welt!\n" or die $!;

seek $fh, 0, 0;
print <$fh>;

close $fh;


Dieses Skript gibt wie es sollte zwei mal "Hallo, Welt!" aus...

Das file.log nachher Leer ist, ist klar, da es eine andere Datei ist, aber $fh in deinem Programm zeigt immer noch auf deine alte Datei...

Mit "rm" löscht du halt keine Datei du entfernst halt nur ein Link...\n\n

<!--EDIT|sid burn|1182001990-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Log::Handler: binmode, utf8