Cruz: Problem mit Referenzierung

Beitrag lesen

Hi Klaus,

Zuerst frage ich mich warum $image_grid->[$x][$y] und nicht $image_grid[$x][$y]. Aber das kann durchaus seine Gründe haben.

Hat keine Gründe, du hast Recht man kann sich den Pfeil da sparen. :)

Allerdings speicherst Du in allen Arrayelemente eine Referenz auf das gleiche Hash, womit beim dereferenzieren alle das gleiche Ergebnis haben. Es kann durchaus sein, daß Du es so willst, was ich aber nicht annehme.

Auch hier hast du recht das wäre nicht so gewollt gewesen. Ich bin gar nicht erst dazu gekommen das zu sehen, weil ich nach dem Beenden der while fetchrow Schleife

print $image_grid->[0][0]{image_id}; # hier nicht mehr

das hier ausgegeben hab. Es war immer leer. Daher dachte ich meine Referenzen funktionieren nicht. Aber der Grund liegt in dem was du gesagt hast, alle Referenzen zeigen auf den gleichen Hash, nämlich dem letzten, der beim letzten fetchrow Aufruf leer wird.

Jetzt habe ich das letztendlich so gelöst:

while ( ($image_id, $image_title, $image_small_name) = $select->fetchrow() )
{
  # create a two dimensonal array of anonymous hashes
  $image_grid[$x][$y] = {
    image_id => $image_id,
    image_title => $image_title,
    image_small_name => $image_small_name,
  };
}

Danke für die Hilfe!
Cruz