[Cologne-pm] $${VariablenName} funktioniert nicht immer

Robert Meiser Robert.Meiser at rrz.uni-koeln.de
Tue Jun 24 05:30:42 CDT 2003


Hallo Aristoteles,
hat leider etwas gedauert bis ich deine Info verarbeiten konnte. Vor allem
gedanklich.
Hier noch ein paar eigene Ideen...

On Wed, 18 Jun 2003, A. Pagaltzis wrote:
> * Robert Meiser <Robert.Meiser at rrz.uni-koeln.de> [2003-06-17 10:13]:
> > @Suchworte= Liste der im web tatsächlich ausgefüllten Felder
> >   foreach $Suchwort (@Suchworte) {

> Der Code ist etwas zu Pseudo und verkürzt, um definitives sagen
> zu können, aber prinzipiell würde ich hier das im Weiteren
> erläuterte machen. Zunächst ist ein Hash die richtige Methode,
> wird aber nur einmal am Anfang benötigt. Der sorgt für die
> Zuordnung von Feldnamen zu -positionen:
>
> my %field_for = (
>     Vorname => 0,
>     Nachname => 1,
>     # ...
> );

> Dann wandle ich damit die Liste der Feldnamen die geprüft werden
> sollen in Indizes um:
>
> my @check_field = @field_for{@suchworte};

Ohh! Diese Syntax war mir bisher nicht bekannt. Hab ich sonst immer
umständlich mit foreach gemacht. Sehr praktisch :-)

> Einlesen eines Datensatzes:
>
> foreach $filename (readdir(..)) {
>     open my $fh, '<', $filename or die "$!\n";
>     while(<$fh>) {
>         my @record = split /:/, <$Datei>;

ist inzwischen geändert zu ;-):
  foreach $key (keys(%Database)) {
    my @record = split /:/, $Database{$key};
  ...
  }

> Jetzt nehme ich einfach die Indizes aus @check_field um die
> gewünschten Felder abzuklappern:
>
>         my $match; # $match ist undefiniert
>         for(@record[@check_field]) {
>             $match++, last if m/^$suchstring$/;
>         }

Tja jetzt wollte ich eigentlich eine Lösung präsentieren nach der ich

foreach $Suchwort (@Suchworte) {
  last if ($record{$Suchwort} !~ m/^$Suchstring{$Suchwort}$/;
    $match++;
}

machen kann. Aber die Erstellung eines Hashes %record mit benannten
Feldern ist offensichtlich ein Aufwand, der nicht mal (wie ich gehofft
hatte) den Code menschenlesbarer macht.
Also mach ichs wohl tatsächlich mit den Indizes.

> Das eq 'true'/'false' kannst du dir übrigens sparen, 0 bzw undef
> sind falsch, erhöhst du eine Variable, so wie oben mit ++, sodass
> sie einen Betrag != 0 hat, ist sie wahr.

mein Chef vertritt die Auffassung, dass gerade bei den Konstruktionen
while ($foo), und if ($bar) es "Sicherer" ist explizit hinzuschreiben, was
die Bedingung ist. Nach dem Motto "lieber zu ausführlich, als bei einer
Unbedachtheit überrascht zu werden"

Nochmal danke für die ausführliche Hilfe

Gruss
Robert




More information about the Cologne-pm mailing list