Malte Köhrer: Kann Array nicht auslesen?

Hallo allesamt,

ich sitze hier grade an meinem 2. Perlscript und verzweifle mal wieder... Das Script soll zwei Dateien öffnen:

a) linkvorlage.html - ein template für eine fertige seite, der aus der Variablen gezogen werden und angezeigt. Es ist eine normale HTML-Datei mit $overall$ anstelle des overallratings beispielsweise.

b) links.csv - eine excelltabelle als csv (colon seperated values) exportiert, daß die Datenfelder für linkvorlage.html enthält.

Beim aufruf dieses Skipts passiert herzlich wenig, außer den nachträglich eingesetzten Statusmeldungen. Zwar wird "print qq(habe temp geoeffnet)" erreicht, aber der Teil danach scheint irgendwo einen Fehler zu haben. Ich habe mittels des (hier auskommentierten) "#print @link;" überprüft, ob @link Daten enthält und die Seite wurde korrekt ausgegeben.

Warum ignoriert er bloss die

foreach $zeile (@link)
{
print $zeile;
}

?

Für jegliche Idee wäre ich extrem dankbar. Ich seh den Fehler einfach nicht.

Malte

--- volles skript ---

#!/usr/bin/perl
use CGI qw(:standard);

(c) 1999 malte koehrer (malte@koehrer.de)

detailed site view

@link = ("");
$linkvorlage = "linkvorlage.html";

$abfrage = new CGI;

-------- html header -------------

print qq(Content-type: text/html\n\n);

print qq(<html><head><title>links-navigator</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><body bgcolor="#242c9d" link="#CCCCFF" text="#FFFFFF" vlink="#3333FF">);

read

open(fh_link, "<".$linkvorlage) die "kann linkvorlage.html nicht lesen\n";
while(<fh_link>) { push(@link, $_); }
close(fh_link);

#print @link;

-------- open csv, search site -------------

open(f_link, "<links.csv") die "kann links.csv nicht lesen\n";

@link = ("");

while(<f_link>)
{
@data_link = split(/;/,$_);
if($data_link[1] eq $abfrage->param('url')) { last; }
}
close(f_link);

print $data_link[1];

-------- take html template and insert content -------------

print qq(habe temp geoeffnet);

foreach $zeile (@link)
{
print $zeile;
}

-------- close table, end html -------------

print qq(</table>);
print qq(</body></html>);

  1. Hallo Malte,

    Warum ignoriert er bloss die

    foreach $zeile (@link)

    »»  {
    »»  print $zeile;
    »»  }

    Unterhalb der Zeile:
    open(f_link, "<links.csv") die "kann links.csv nicht lesen\n";
    hast du stehen:
    @link = ("");
    Die Anweisung verstehe ich da nicht. Damit loeschst du doch den gesamten Array, den du zuvor mit:
    while(<fh_link>) { push(@link, $_); }
    gefuellt hast!
    Und dann ist es eigentlich auch klar, warum keine $zeile ausgegeben wird. @link ist ja leer!

    Bevor Du @link mit den Daten aus <fh_link> versorgst, hast du schon mal ein:
    @link = ("");
    dastehen. Macht als saubere Initialisierung auch Sinn. Nur das zweite Vorkommen dieser Anweisung weiter unten solltest du mal entfernen.

    viele Gruesse
      Stefan Muenz