hi,
kann den Fehler einfach nicht finden. Untenstehendes kleines Modul bindet ein Scalar an eine Klasse. Beim Aufruf in der main wird die Variable hochgezählt, aber nach der 26 gehts bei 2 wieder von vorn los. Eigenartigerweise klappt die Erhöhung, wenn eine Schleife drumgelegt wird.
Idee's ???
Hotti
package Number;
use strict;
use Fcntl qw(:DEFAULT :flock);
use Tie::Scalar;
use vars qw(@ISA);
@ISA = qw(Tie::StdScalar);
use warnings;
my $FH; # File Handle
# Konstruktor
sub TIESCALAR{
my $class = shift;
# Repository File, Schreibberechtigung sicherstellen!
my $file = shift || '/tmp/number.bin';
sysopen($FH, $file, O_RDWR|O_CREAT) or return;
flock $FH, LOCK_EX;
binmode $FH;
my $bin = undef;
read $FH, $bin, 4;
my $nr = unpack("N", $bin) || 1;
return bless \$nr, $class;
}
# Schreibe die Nummer zurück in die Repository
sub DESTROY{
my $self = shift;
truncate $FH, 0;
seek $FH, 0, 0;
print $FH pack "N", $$self;
close $FH;
#print "\nDESTROY\n";
}
###########################################################################
1;
###########################################################################
package main;
tie(my $c, 'Number') or die $!;
$c++;
print $c;