sub count {
my ($page,$ipnum)=@_ ;
my $checknone = 0;
my $date= &datum_zeit;
my $lock = 1;
my @output ;my @lines;
my $i=0;
#Daten laden
open (DAT , "< ./data/stat.log") || die "Kann Datenfile (/data/stat.log) nicht zum Lesen öffnen" ;
$! sagt dir dann auch warum.
@lines = <DAT> ;
close(DAT) ;
Wenn du die Zeilenumbrüche nicht brauchst, dann mach das hier:
chomp(@lines = <DAT> );
#Count schreiben
foreach $line (@lines)
{
$i = $i +1;
$i++;
my ($num, $pgname, $ipadress, $datum) = split(/&&/, $line) ;
$datum=chomp($datum);
if ($pgname eq $page)
Ist in $page wirklich ein String?
{
$num++;
$checknone = 1;
$checknone++;
$output[i]="$num&&$pgname&&$ipadress&&$datum&&" ;
Was ist i?
Du meinst $i
}
else
{
$output[i]="$num&&$pgname&&$ipadress&&$datum&&" ;
}
$output[$i] hat kein \n, d.h. es wird später alles in eine Zeile geschrieben.
}
if ($checknone == 0)
if (!$checknone)
{
$i = $i +1;
$i++;
$output[i]="1&&$page&&$ipnum&&$date&&" ;
}
open (DAT , "> ./data/stat.log") || die "Kann Datenfile (/data/stat.log) nicht zum Schreiben öffnen" ;
print DAT "@output";
Wenn du ein Array so ausgibst, werden die Elemente mit dem LIST_SEPARATOR Zeichen getrennt:
Probier es aus:
my @list = (1...10);
$" = ";";
print "@list";
D.h. du hast in deiner Datei eine Zeile in der die Datensätz mit einem Leerzeichen (Defaultwert von $") getrennt sind.
Struppi.