Thread Fortlaufende Nummer in der pm-Datei selbst (37 answers)
Opened by rosti at 2013-12-31 18:25

rosti
 2013-12-31 21:29
#164558 #164558
User since
2011-03-19
3500 Artikel
BenutzerIn
[Homepage]
user image
Quote
du liest den zähler aus der datei, bevor du sie dann nochmal öffnest und lockst. race condition,


Oh danke, das ist mir durch die Lappen gegangen, habs korrigiert ;)

Quote
den pfad gäbe übrigens leichter mit $INC{'Number.pm'}.


Geht auch, danke!

Quote
wenn die datei gerade geschrieben wird und ein anderer prozess das modul mit use lädt,


Dürfte nicht passieren, wenn die .pm gerade geschrieben wird, ist sie gelockt.

Allerdings ist es möglich, dass mehrere use Number; gleichzeitig aufschlagen ... hmm, gelesen wird die Zahl erst nach dem LOCK_EX, es dürfte nichts passieren.

Ok, for home using only ;)
Danke Dir!!!

Der Neue Konstruktor
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub new{
        my $class = shift;
        my $self = bless{}, $class;
        return eval{
                my $file = $class.".pm";
                $self->{POS} = tell DATA;
                $self->{BUF} = '';
                $self->{FH} = new IO::File;
                $self->{FH}->open($INC{$file}, O_RDWR) or die "IO-Error: $!";
                flock $self->{FH}, LOCK_EX or warn "Your system does not support flock";
                $self->{FH}->seek($self->{POS}, 0);     
                read $self->{FH}, $self->{BUF}, 32;
                $self->{NR} = unpack "A32", $self->{BUF};
                $self;
        };
}

View full thread Fortlaufende Nummer in der pm-Datei selbst