[Cologne-pm] Hash von Hash von Array???

Wolfgang Weisselberg pl3rofb02 at sneakemail.com
Sun Feb 22 17:57:40 CST 2004


Melanie wrote 32 lines:

> jetzt mal 'ne "richtig" Perl-Frage ,-)

> Ich habe folgendes (zugegeben recht wildes) Konstrukt:

>    $Index{$i} = {
>       Name => $Name,
>       Mutter => $Mutter,
>       Vater => $Vater,
>       Abgabe => $Abgabe,
>       Krankheiten => [ @Krankheiten ],
>    }

Ich sehe Bedarf fuer Perltidy.
    http://perltidy.sourceforge.net/
Lassen wir ihn mal ueber deinen Code laufen ...

    $Index{$i} = {
        Name        => $Name,
        Mutter      => $Mutter,
        Vater       => $Vater,
        Abgabe      => $Abgabe,
        Krankheiten => [@Krankheiten],
      }
       ^ 
    da moechte ein Semicolon hin, wenn es nicht wirklich das Ende
    eines Blockes ist.  Dann stimmt die Einrueckung auch (wieder).

> Wobei ich den @Krankheiten vorher wie folgt bastele:

> print "Krankheiten des Tieres bitte durch Kommate getrennt angeben.\n";
> chop(my $Krankheiten =<STDIN>);

Aristoteles hat zu chop & chomp schon gesprochen.  Und er hat
recht.

> my @Krankheiten = split /,/,$Krankheiten;

1. Eingabe: "Haarausfall, Heisshunger, Streichelsucht"

    my $Krankheiten = "Haarausfall, Heisshunger, Streichelsucht";
    my @Krankheiten = split /,/, $Krankheiten;

    use Data::Dumper;
    print Dumper \@Krankheiten;
   => $VAR1 = [
                'Haarausfall',
                ' Heisshunger',
                ' Streichelsucht'
              ];
   Da sind ja Spaces am Anfang!
   Ein "split /\s*,\s*/, $Krankheiten" behebt das.

2. Macht ein Array hier Sinn?  Arrays lassen sich zwar gut
   anzeigen und nach Positionen anspringen, aber schlecht
   durchsuchen.  Es ist kein grosses Problem bei kleinen
   Arrays, aber bei groesseren ist ein Hash besser. 
   
3. Durchsuchen.  Wenn du irgendwann die Krankheiten
   durchsuchen willst, dann willst du normierte, einheitliche
   Krankheitsnamen.  Oder besser noch, eine numerierte Liste
   von Krankheitsnamen, wo du in einem Hash (Platzverbrauch bei
   hauptsaechlich leeren Arrays!) die Nummer als key und geg.
   einen Kommentar als value verwendest.  (Datenmodellierung!)

4. Speaking of ... wie speicherst du die Daten?  Was du machst,
   klingt mir extrem verdaechtig nach einer Datenbankanwendung.
   Perl kann recht gut mit Datenbanken, siehe das DBI-
   (DataBase Interface) und die DBD::*-  (DataBase Driver)
   Module.  Fuer wenige Tausend Eintraege sind sogar CSV-Files
   (Komma-separierte Daten) recht brauchbar.

   Fuer groesseres gibt es genug freie Datenbanken, je nach
   Bedarfsprofil.

> Nur ich bin mir nicht sicher ob die Zuweisung da oben stimmt. Die
> Version liefert mir zwar keine Fehlermeldungen aber... mir ist mulmig!

Fuer sowas ist Data::Dumper ein hervorragendes Tool: ist die
Struktur so, wie ich dachte?


-Wolfgang



More information about the Cologne-pm mailing list