Guest Enana-> push @data,[@$ref] habe ich in der while Schleife übergeben weil $ref sich die ganze Zeit selbst überschreibt.
Es wird nichts überschreiben den du benutzt
my:
while(my $ref=$sth->fetchrow_arrayref) {
...
}
Das was in in den runden Klammern zu
while steht gehört vom Geltungsbereich schon zum Inhalt der Schleife.
ganz einfacher Test:
my $x=100; while(my $x=0){} print $x
Wenn du recht hast müsste in der Ausgabe "0" erscheinen. Es kommt aber "100".
Was bedeutet das du dies schreiben kannst ohne die Inhalte zu überschreiben:
while(my $ref=$sth->fetchrow_arrayref){
push( @data, $ref );
}
Denn es wird bei jedem Durchlauf die Variable neu erzeugt.
Wenn du aber das
my weg lässt hast du recht, da die Variable außerhalb der Schleife definiert ist:
my $x=100; while($x=0){} print $x
die Ausgabe ist hier nun "0"
Noch eine Bemerkung am Rande. Mir scheint es das du kein
use warnings; verwendest. Das hätte dir bei deinem Problem mit den Refenzen zumindest Aufgezeigt das du da was nicht 100% korrekt machst. Auch
use strict; ist hilfreich. Man sollte immer diese beiden Pragmas benutzen.