Frank Schönmann: Suchfunktion in Perl

Beitrag lesen

hi!

open(HTMLFILE,"htmldateiname.html);
while (<HTMLFILE>)
Kannst du mir diese while-Schleife mal genauer erklären..
Die Bedingung ist doch da die Datei und er mach hüpft jetzt also
jeden Durchgang eine Zeile weiter runter oder wie darf ich das
jetzt verstehen ?

Er liest in jedem Durchgang die nächste Zeile der Datei ein und
speichert den Wert in der Spezialvariablen $_.

{
  if ($_=~/***HIER REGULÄRER AUSDRUCK***/)

^^^^
Den unterstrichenen Teil ($_=~) kann man weglassen, weil der reg.
Ausdruck sowieso die Variable $_ überprüfen würde, wenn keine andere
angegeben ist.

open(HTMLFILE,"datei.txt");

Besser:
  open HTMLFILE, "<datei.txt" or die "Konnte Datei nicht öffnen: $!";

Dann wird zum einen explizit angegeben, dass die Datei zum lesen
geöffnet wird, und zum zweiten erhälst du eine Fehlermeldung und
einen Programmabbruch, wenn das öffnen der Datei nicht geklappt hat.

while (<HTMLFILE>)
{
  if ($_=~/href="(...)">/)

Hier überprüfst du auf drei beliebige Zeichen innerhalb der Klammern,
denn . steht in regulären Ausdrücken für genau ein beliebiges
Zeichen. Da musst dur dir also was anderes ausdenken, nämlich indem
du irgendwelche Quantoren[1] verwendest. Da gäbe es zb. folgende:

.?   Zeichen muss null- oder einmal vorkommen.
  .+   Zeichen muss mindestens einmal vorkommen.
  .*   Zeichen muss mindestens nullmal vorkommen.
  .+?  Zeichen muss mindestens einmal vorkommen, allerdings ist der
       Ausdruck nicht mehr gierig.
  .*?  Analog zu .+? und .*.

Was gierig (engl. "greedy") bedeutet, steht sicherlich in jeder guten
Perl-Dokumentation, genauso wie die restlichen Quantoren, die zur
Verfügung stehen. Mit diesen Hilfsmitteln wirst du sicher weiter
kommen... :)

{
    $i=0;

Wie schon gesagt: das in jedem Schleifendurchgang zurückzusetzen ist
nicht so günstig.

@ergebniss[i]=$1;

Auf Array-Elemente greift man folgendermaßen korrekt zu:
  $ergebnis[$i] = $1;
Wichtig ist der $ vor ergebnis -- übrigens ist Rechtschreibung bei
Variablennamen nicht verboten ;) -- und der $ vor dem i, denn in
Perl müssen Variablen mit ihrem Typ gekennzeichnet sein.

print TESTFILE @ergebniss[0];

Nein, entweder @ergebnis für das komplette Array, oder $ergebnis[0]
für das erste Element.

bye, Frank!

[1] heißen die in regulären Ausdrücken überhaupt so? :)