Klaus Mock: Strings mit Variablen verbinden ?

Beitrag lesen

Hallo,

Wenn ichs vom Server laufen lasse -> Internal Server Error

Was steht im Error-Log des Webservers?

#!/usr/bin/perl -w

use CGI;
use CGI::Carp qw(fatalsToBrowser);

Hier würde ich auch unbedingt ein
use strict;
einfügen. Allerdings solltest Du Dir dann auch die Geschichte mit 'my' ansehen;-)

$query = new CGI;
$counter = 0;
@hilfsliste = "";
$dateiname = "";

print $query->header;
open(ZAEHLER,">>data.txt") or die "Zaehler kann nicht geoeffnet werden : $!\n";
flock ZAEHLER, 2;
print ZAEHLER "a";
close ZAEHLER;

open(ZAEHLER,"<data.txt") or die "Zaehler kann nicht geoeffnet werden : $!\n";
while (<ZAEHLER>)
   {
    while (/a/)
       {
       $counter++;
       }
   }
close ZAEHLER;

Diese Art, einen Zähler zu implementieren wird auf Dauer recht unperformat, da die Datei ziemlich groß werden kann. Warum schreibst Du den Zähler nicht einfach in die entsprechende Datei:
(Hier jetzt mal eine absolut quick & dirty version)
my $counter;
if(open(IN,'data.txt'))
   {
   $counter= <IN>;
   close  IN;
   }
else
   {
   $counter = 0;
   }
$counter++;

if(open(OUT,'>data.txt'))
  {
  print OUT $counter;
  close OUT;
  }

Wie gesagt, hier fehlen noch einige dinger wie flocks und so.

push @hilfsliste, 'text';
push @hilfsliste, $counter;
push @hilfsliste, '.txt';
$dateiname = join('',@hilfsliste);
open (FILE,">$dateiname") or die "Neue Datei kann nicht geoeffnet werden : $!\n";
close FILE;

Das ist zwar recht unüblich sollte aber trotzdem funktionieren, vielleicht klemmts ja schon weiter oben.

Aber warum versuchst Du es nicht mal etwas mehr perlish:
   $dateiname = "text$counter.txt";
bzw. (deutlich krisensicherer)
   $dateiname = "text${counter}.txt";
anstelle des Arrays und einem join.

Grüße
  Klaus