Thread Thread zum Freuen 2.0 (143 answers)
Opened by GwenDragon at 2009-09-09 17:43

rosti
 2011-06-10 19:24
#149566 #149566
User since
2011-03-19
3411 articles
BenutzerIn
[Homepage]
user image
Wieder etwas Komplizierteres geschafft, wörüber ich mich freue!

Problem war keins:
Code (perl): (dl )
1
2
tie my %h, 'Rabbit', $file;
print $h{'/index.html'}{'title}; 


Würde jedoch mit der Zeit zum Problem werden, wenn einmal die Site größer wird und zum Anderen der komplette Hash mit allen Attributen mitgeschleppt werden soll (ja, das muss sein *G).

Da nun auch noch die Bodies (bischen mehr Text und HTML) mit rein sollen, habe ich mir gedacht: Das wird langsam eng im Hauptspeicher. Idee: Anstelle die Attribute (title, descr, body...) als Scalar in den Hash zu legen, soll nunmehr dort eine Array-Ref stehen mit Position und Offset (an [0] und an [1]), damit über das mitgeschleppte FileHandle der Wert gelesen werden kann.

Böse Überraschung:

Code (perl): (dl )
print $h{'/index.html'}{'title}; 


liefert zwar wie erwartet eine Array-Ref, aber es besteht keine Möglichkeit, innerhalb der Package auf [0] und [1] zuzugreifen, also in der Methode FETCH, die hierzu gerufen wird.

Die Lösung des Problems fand ich im Code des schönen CPAN-Moduls Config::IniFiles, der Kollege hat dazu eine Subklasse erstellt, über die dann aus FETCH heraus ein neues Objekt für den inneren Hash erstellt wird, wobei die interne Subklasse dann auch noch eigene FETCH-, FIRSTKEY und NEXTKEY-Methoden hat; das Ganze wird gestützt mit Public-Methods, die für das Objekt zu schreiben sind (juhu, die hatte ich schon).

Euch allen ein schönes Pfingst-Wochenende,
viele Grüße,
Rosti


Edit/PS: Das Neue heißt jetzt 'LowRabbit' und läuft einwandfrei anstelle 'Rabbit'. ToDo's sind noch das File-Lock und die Serialize-Funktion, hier wird dann aber der komplette Hash gebraucht zum Zurückschreiben in die Datei; das passiert jedoch nicht bei jedem Seitenaufruf sondern nur administrative.
Last edited: 2011-06-10 19:28:56 +0200 (CEST)

View full thread Thread zum Freuen 2.0