Struppi: Zeilenumbruch \n wird nicht ausgegeben.

Beitrag lesen

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.