PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Perl]: Der Kamp mit den Referenzen



coolpix
24-01-2006, 20:31
Hallo,

ich bin dabei mir ein Skript zu schreiben um meine Musiksammlung erstmal auszugebe. Danach möchte ich das ganze auch vielleicht damit verwalten, aber estmal nur HTML ausgeben. Erstens möchte ich einen Index aller Artists und Alben haben, und drunter halt die komplette Liste aller Musikstücke, von wo raus eben aus dem Index mit einem Link verwiesen wird. Die Infos nehme ich aus den Mp3-Tags mithilfe von MP3::TAG und sie werden Schleife fuer Schleife temporaer in $artist, $album, $track und $title gespeichert.

Das eigentliche Problem liegt mir beim ausgeben. Ich verstehe das Problem mit den Referenzen nicht. perldsc hat mir auch nicht weitergeholfen.

Vielleicht kann mir einer weiterhelfen. Hier der Code:


push @music, { $artist, $album, $track, $title };

Das Ausgeben kapier ich halt nicht, und die Snippets aus perldsc helfen mir auch nicht weiter.

mfG

Romanday
28-01-2006, 11:51
Das eigentliche Problem liegt mir beim ausgeben. Ich verstehe das Problem mit den Referenzen nicht.

mfG

Ist Teil jeden Kurses oder Ausbildung.!?

Such mal nach

call-by-value
call by reference

und du wirst fündig.

michael.sprick
28-01-2006, 12:31
Sieh Dir auch mal


perldoc perlref
perldoc perlreftut


an.

Dein Code zum speichern der Referenz ist auch nicht ganz richtig...
Du willst:




$ARRAY = (
[0] -> ['wert1', 'wert2', 'wert3', 'wert4'],
[2] -> ['wert11', 'wert22', 'wert33', 'wert44'],
[3] -> ['wert111', 'wert222', 'wert333', 'wert444']
)



Du hast:



$ARRAY = (
[0] -> { 'schluessel1' => 'wert1', 'schluessel2' => 'wert2' },
[1] -> { 'schluessel11' => 'wert11', 'schluessel22' => 'wert22' },
[2] -> { 'schluessel111' => 'wert111', 'schluessel222' => 'wert222' },
)



Ein Hash ist zwar, genau wie ein Array auch, nur eine Liste von Skalaren, hat aber den Unterschied, dass die Anzahl der Elemente eines Hashes durch zwei teilbar sein muss... es werden ja immer Key-Value Paare gespeichert.
Der Operater => ist auch nur ein Synonym für das Komma . Daher funktioniert Dein Code ohne Warnungen.

Trotzdem: Du erzeugst durch das {} eine Hashreferenz (Zeiger). Ersetze die {} gegen [] und alles wird gut ;)

Element X vom Array @music enthält dann also eine Referenz (einen Zeiger) auf ein weiteres Array, indem dann wiederum Deine Werte liegen.

in den o.g. Perldocs suchst Du mal derefence bzw. unter "Using References -> Absatz 2".
Dort steht, wie Du wieder an Deine Werte rankommst :)

coolpix
28-01-2006, 20:56
Hallo,

vielen Dank fuer die Antworten. Mein Problem hat sich mittlerweile geloest, mein Problem war eher die schlechte Organisierung. Ich hab halt nun ein hash genommen, das eine Referenz zu $artist und $album, und dann noch ein Hash mit $track => $title hat.

mfG