Thread Array Derefenzieren (6 answers)
Opened by Enana at 2015-06-06 00:00

topeg
 2015-06-06 10:52
#181266 #181266
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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:

Code (perl): (dl )
1
2
3
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:
Code (perl): (dl )
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:
Code (perl): (dl )
1
2
3
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:
Code (perl): (dl )
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.

View full thread Array Derefenzieren