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

Michael Lamertz mike at lamertz.net
Wed Feb 25 08:47:21 CST 2004


Sorry, I'm late.  War Karnevalsfluechtig.

On Tue, Feb 24, 2004 at 10:18:05PM +0100, Melanie wrote:
> Hallo zusammen,
> 
> ihr seid fix! Und ihr macht gleich einen ganzen Rundumschlag... nun gut, 
> ich will mal versuchen alles zusammen zu sammeln und was draus zu lernen.
> 
> Aber vorweg: schlagt mich nicht! Ich kenn Perl seit genau 2 Wochen!

<rant>
Internet-Survival-Rule #1:  Geh' aufrecht!  Anfaenger-Bashing betreiben
nur picklige 14-jaehrige die sonst immer von ihren grossen Bruedern
verkloppt werden.  Auch wenn der Ton evtl. manchmal spitzzuengig wird
(i.d. Regel in meinen Mails, ich weiss, ich weiss... ich bin schlecht)
sind wir doch hauptsaechlich hier, weil wir Perl moegen, oder
weiterbringen wollen.
</rant>

> [Thema Referenzen]
> 
> >[...]  Bei Arrays ist es deswegen üblich, weil der
> >Kopieraufwand uU erheblich sein kann; allerdings sollte man das
> >dann logischerweise nur dann tun, wenn man das gleiche Array
> >nicht später für andere Zwecke (bzw Datensätze) recyclet.
> 
> Ah, okay, das leuchtet mir ein.
> >
> >    chop(my $Krankheiten =<STDIN>);
> >
> >Übrigens sehe ich da was, das mir garnicht aufgefallen ist: du
> >willst nicht chop(), sondern chomp(). 
> 
> Ups, wie gut, daß es "Suchen und ersetzen" gibt, das habe ich überall.

<sidenote>
/me hat gerade einen Blick auf die perldoc zu chop geworfen, und obwohl
es ein 'Seel also: chomp' gibt, gibt es dort nicht den ueblichen

    "NIMM CHOMP!!!"

hinweis.  Weiss jemand wieso?  Gibt es evtl. sinnvolle Einsatzgebiete
die sich mir bisher verschliessen?
</sidenote>

> > Ich sehe Bedarf fuer Perltidy.
> >    http://perltidy.sourceforge.net/

*gg* Wolfgang spammt 'mal wieder sein Lieblingstool weil er's noch immer
nicht geschafft hat, Emacs zu auto-indent zu ueberreden.  >;->

> [Wolfgang]
> > Benutzertechnisch ist natuerlich  beides ungut.
> > Wie waere es mit einer Auswahlbox der bekannten Krankheiten, samt
> > Autoergaenzung und natuerlich der Moeglichkeit, neue Krankheiten
> > auch einzugeben?

So macht man aus einer kleinen Support-Applikation ein 800-pfuendiges
Gorillamonster.  Der traurige Weg aller Software die letztendlich
auch 'mal *benutzt* werden muss.

Lieber wuerde ich da dem Vorschlag Deiner anderen Mail folgen, und in
dem Tool eine sorgfaeltige Plausi unterbringen, und ein *externes*
GUI-Programm noetigenfalls da 'drueber kleben.

> [Aristoteles]
> > Klar, das vorgestellte Interface ist natürlich nicht gerade schön
> > zu bedienen.
> 
> Ähm, ja, schon. Habt ja recht. Aber ich war eigentlich so schon recht 
> froh das ohne größeres Chaos hinbekommen zu haben.
> Irgendwann - so in ganz ferner Zukunft - soll das dann mal in Richtung 
> cgi - oder so, weiß ich noch nicht.

In dem Fall wuerde ich die Eingabe so simpel wie moeglich realisieren.
Komplexe Readline-Routinen stehen Dir bei CGI nur im Wege.

Tip:  Verstecke die vollstaendige Funktionalitaet des Programmes in
Libraries, baue Dinge wie Ein-/Ausgabe, GUI, oder das CGI-Interface
eigenstaendig und lasse sie dann die Libraries benutzen.  So hast Du die
reine Funktionalitaet Deiner Applikation vollkommen Sauber von all den
Fallstricken die User-Interaktion mit sich bringt getrennt.

> Lacht ruhig, ich weiß es ist blödsinnig sich sowas vorzunehmen, wenn man 
> keine Ahnung hat ,-)

<richy>Was lachst Du!  Lachischoderwas!</richy>

> > 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.
> 
> Ich denke, es werden nicht mehr als drei oder maximal vier Einträge pro 
> Array werden.

Unabhaengig von der Anzahl der Eintraege, solltest du beim Planen von
komplexen Datenstrukturen immer erst darueber nachdenken, auf *welche*
Daten Du zugreifen willst.

Willst Du z.B. wissen, welche Krankheiten eine Person hat, so empfiehlt
es sich wohl, die Krankheiten im Hash "Person" unterzubringen.

Willst Du auf der anderen Seite aber Statistiken ueber die Haeufigkeit
von Krankheiten aufstellen, so wuerde bei dieser Datenstruktur der
Zugriff extrem aufwendig, da Du ja alle Personen anfassen musst um
diese nach bestimmten Krankheiten zu durchsuchen.  Es wuerde sich also
anbieten, die Liste der betroffenen Personen im Hash "Krankheiten" zu
erfassen.

Oft brauchst Du beide richtungen, und musst Dich dann entscheiden,
welche Version oefter benutzt wird, um diese dann entsprechend
vorzuziehen.  Oder Du baust zwei Hashes die Du ueber
verknuepfungstabellen verbindest.

    Person:
        Name
        Vorname
        ...

    Krankheiten:
        Was
        Wie schmerzhaft
        Heilmethoden
        ...

    P2Kmap:     (Personen-Key als Key)
        Liste der Krankheiten

    K2Pmap:     (Krankheiten-Key als Key)
        Liste der betroffenen Personen

Und schon macht es Sinn ein bischen Datenbank zu lernen.

> > 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.
> 
> Genau das soll es werden - irgendwann mal.
> Echt? CSV's klappen noch mit ein paar Tausend? Das würde mir ja völlig 
> reichen! Dicke!
> Nicht, daß ich trotzdem Spaß dran hätte mich auch weiter in die 
> Datenbank-Richtung fortzubewegen, aber eins nach dem anderen.

Wenn es nur darum geht, "state" zu sichern, dann kannst Du evtl. auch
'was mit "Storable" anfangen.  Geht es aber darum Daten auszutauschen,
dann nimm CSV oder XML.  Auch wenn Wolfgang bestimmt gleich wieder nach
dem Beissholz greift, XML::Simple ist eine nette Moeglichkeit, aus
Perl-Strukturen XML-Files zu bauen, oder umgekehrt.



Mike

-- 
	    Well, then let's give that Java-Wussie a beating... (me)

Michael Lamertz                        |     +49 2234 204947 / +49 171 6900 310
Sandstr. 122                           |                       mike at lamertz.net
50226 Frechen                          |                 http://www.lamertz.net
Germany                                |               http://www.perl-ronin.de 



More information about the Cologne-pm mailing list