Probleme mit for-Schleife [Perl]

Hallo,

ich möchte einen String ($check_feld) nach verschiedene Worten in einem Array (@suchworte) abgleichen und überprüfen, ob alle diese Suchworte in dem String enthalten sind. Dabei soll die Position und die groß-/kleinschreibung vernachlässigt werden.

Doch anscheinend funktioniert mein Programm nicht, wenn es aus einer for-schleife aufgerufen wird. Warum ist mir nicht klar.

Hier jedoch der Quelltext einmal mit direkter Zuweisung und der besagten for-Schleife:


#!/usr/bin/perl5

print („Content-type: text/html\n\n“);
print („Start:\n\n“);

$suchworte[0] = „land“;
$suchworte[1] = „eng“;
$check_feld = „Deutschland“;

print („Abgleich_a:\n\n“);
&abgleich_a;
print („Abgleich_b:\n\n“);
&abgleich_b;

exit;

##################

sub abgleich_a{ # Check-feld
$akt_anz = 0;
for($s=0;$s $akt_anz \n\n
");

} # end sub abgeich

sub abgleich_b{ # Check-feld
$akt_anz = 0;

$akt_suchwort = $suchworte[0];
print ("$check_feld enthält $akt_suchwort / ");

if($check_feld =~ /$akt_suchwort/oi){
print ("$check_feld enthält $akt_suchwort : ");
$akt_anz++;
print ("ja $akt_anz, „);
} else {
print (“$check_feld enthält $akt_suchwort : ");
print ("nein $akt_anz, ");
};

$akt_suchwort = $suchworte[1];
print ("$check_feld enthält $akt_suchwort / ");

if($check_feld =~ /$akt_suchwort/oi){
print ("$check_feld enthält $akt_suchwort : ");
$akt_anz++;
print ("ja $akt_anz, „);
} else {
print (“$check_feld enthält $akt_suchwort : ");
print ("nein $akt_anz, ");
};

print (" --> $akt_anz
\n\n");

} # end sub abgeich

Habt Ihr vielleicht eine Idee wie ich mein Problem lösen kann?

Vieln Dank
Michael

Hallo Michael!

Doch anscheinend funktioniert mein Programm nicht, wenn es aus
einer for-schleife aufgerufen wird. Warum ist mir nicht klar.

if($check_feld =~ /$akt_suchwort/oi){

Die Option ‚o‘ bedeutet ja ‚compile only once‘, das heisst konkret: das Suchwort wird nur einmal ‚berechnet‘, sprich aus der Variable ausgelesen.
Es muss aber hier nicht nur einmal, sondern bei jedem Durchlauf der Schleife neu bestimmt werden, denn es steht ja eine Variable für das Suchwort, und die ändert sich jedesmal.

Lass das o weg, und alles funktioniert wie Du es wolltest.

Schönen Gruss, Ingo

Hallo Ingo!

Vielen Dank für Deinen Tip! Ich hatte bereits das ganze Wochenende gesucht…

Hast Du vielleicht auch eine Ahnung, wie ich am allesbesten HTML-Tags aus einem Text entfernen kann?

Viele Grüße
Michael

Hallo Michael!

Hast Du vielleicht auch eine Ahnung, wie ich am allesbesten
HTML-Tags aus einem Text entfernen kann?

Nun, das ist nicht ganz trivial.
Zumindest dann nicht, wenn es um real existierendes HTML geht, wo auch schon mal eine eckige Klammer im Text steht, die zu keinem Tag gehört sondern eigentlich als geschrieben werden sollte.
In jedem Fall empfehle ich, nach einer bestehenden Lösung zu suchen. Vielleicht ist HTML::FormatText Dein Freund.
Auf http://cpan.org sind noch diverse andere Perlmodule zu finden, die sich mit HTML befassen …

Schönen Gruss, Ingo