[Cologne-pm] $${VariablenName} funktioniert nicht immer
Robert Meiser
Robert.Meiser at rrz.uni-koeln.de
Tue Jun 17 05:10:18 CDT 2003
On Thu, 12 Jun 2003, A. Pagaltzis wrote:
> Ich empfehle jedem, der sich noch nicht hundertprozentig klar
> ist, was das heisst, sich den folgenden Artikel zu geben:
>
> http://perl.plover.com/FAQs/Namespaces.html
Danke! Sehr aufschlußreich.
> Und warum verwendest du symbolische Referenzen, wenn es je nach
> Zweck der Übung entweder harte Referenzen oder ein Hash auch
> täten? Symbolische Referenzen für etwas zu verwenden, was sich
> ohne sie lösen lässt, ist fast immer... nunja, wenig klug.
$$X war die erste Möglichkeit die mir eingefallen ist. Wusste wie gesagt
gar nicht, daß das eine spezielle Bedeutung hat. Hab erst jetzt gelernt
was symbolische Referenzen sind.
> Wenn du uns mehr erzählst, lässt sich mit Sicherheit ein sauberer
> und wartbarer Ersatz finden.
Ok ihr habts nicht anders gewollt ;-)
Aufgabe: Suchformular auf Webseite mit verschiedenen Suchkriterien. '*'
als Joker erlaubt (wird später durch .* ersetzt und direkt als RegEx
verwendet). Datenbasis ist ein Verzeichnis mit etwa 3000 Dateien. Jede
Datei hat eine Zeile mit ':'-getrennten Feldern, die mit den
eingegebenen Suchkriterien verglichen werden sollen. Ergebnis soll eine
Ergebnisseite sein in der man einen einzelnen Eintrag anklicken kann um
sich Detailinformationen anzeigen zu lassen.
Derzeitige Lösung:
@Suchworte= Liste der im web tatsächlich ausgefüllten Felder
(z.B. Vorname, Nachname...)
foreach $Datei (readdir(..)) {
open $Datei
($Vorname,$Nachname...)=split(':' $Datei)
close $Datei
foreach $Suchwort (@Suchworte) {
$Suchstring=$Suchwort."Suchstring";
# ueberpruefe Suchstring z.B $Kennung !~ m/$KennungSuchstring/
# $$ fuer dynamische Variablennamen
if ($$Suchwort !~ m|^$$Suchstring$|i) { # Suchstring passt nicht
$Matched = 'false'; # Flag fuer Trefferliste
last; # naechste Datei
}
}
if ($Matched eq 'true') { # alle Suchworte passen => in Trefferliste
nehmen
push @Trefferliste, (join (":", at Inhalt));
}
$Trefferzahl=$#Trefferliste+1;
# Eindeutiges Suchwort angegeben => Abbruch nach 1. Treffer
if (($Unique eq 'true') && ($Trefferzahl == 1)) {
$Zielkennung=shift(@Trefferliste);
&Infoseite($Formular,$Zielkennung);
}
}
}
Alternativ wäre natürlich denkbar zwei Hashs mit den gleichen
keys(=Feldnamen) zu benutzen.
Etwas unglücklich ist natürlich die Vorgabe mit den 3000 Dateien als
Datenquelle.
Sorry wenn ich euch mit soviel Code zuschmeisse. Bin mir auch nicht
sicher ob die angewandte Methode sehr effizient, sinnvoll, oder
überhaupt richtig ist. Deshalb bin ich Jedermann und -frau für (auch
grundsätzliche) Verbesserungsvorschläge dankbar.
Alles Gute
Robert
More information about the Cologne-pm
mailing list