Hallo Jens,
sub get_number {
open(NUMBER,"+<$basedir/$datafile");
flock(NUMBER, 2);
$num = <NUMBER>;
if ($num == 999999 || $num !~ /^\d+$/) {
$num = "10000";
}
else {
$num++;
}
seek(NUMBER, 0, 0);
print NUMBER $num;
close(NUMBER);
}
besser:
use POSIX qw'SEEK_SET';
use Fcntl qw':flock';
sub get_number {
local *NUMBER;
open NUMBER,'+<'.$basedir.'/'.$datafile or die $!;
flock NUMBER,LOCK_EX or die $!;
$num = <NUMBER>;
if(!defined $num || $num !~ /^\d+$/ || $num == 999999) {
$num = 10000;
}
else {
$num++;
}
seek NUMBER,0,SEEK_SET or die $!;
print NUMBER $num;
close NUMBER;
}
Also benutzen symbolischer Konstanten (die Werte koennen
System-abhaengig sein) und das Abfangen von Fehlern (seek,
open, etc koennen alle fehlschlagen) und das umstellen der
Bedingung in if (ein numerischer Vergleich mit undef oder
einem String gibt eine Warning (zurecht)).
Gruesse,
CK