@pktm: Vergleiche die folgenden Codes:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @array;
my $inhalt; # Variable VOR der Schleife deklariert
for (0 .. 9) {
$inhalt = $_;
push @array, \$inhalt;
}
print Dumper \@array;
_ _END_ _
$VAR1 = [
\9,
$VAR1->[0],
$VAR1->[0],
$VAR1->[0],
$VAR1->[0],
$VAR1->[0],
$VAR1->[0],
$VAR1->[0],
$VAR1->[0],
$VAR1->[0]
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @array;
for (0 .. 9) {
my $inhalt = $_; # Variable IN der Schleife deklariert
$inhalt = $_;
push @array, \$inhalt;
}
print Dumper \@array;
_ _END_ _
$VAR1 = [
\0,
\1,
\2,
\3,
\4,
\5,
\6,
\7,
\8,
\9
];
Du siehst: Wenn du die Variable
vor der Schleife deklarierst, wird immer die
gleiche Referenz im Array gespeichert, und damit immer der gleiche Wert!
Wenn die Variable
in der Schleife deklarierst, gibt es bei jedem Durchlauf eine
neue Referenz, und das ist meist das Gewuenschte.
Ein extra Variable brauchst du aber gar nicht, denn hier kannst du ja mit einem anonymen Hash arbeiten:
while( $db->FetchRow() ){
push @daten, { $db->DataHash() };
}
Wenn du unbedingt moechtest, kannst du das auch mit while als Statement-Modifier in eine Zeile schreiben, wovon es aber auch nicht viel uebersichtlicher wird:
push @daten, { $db->DataHash() } while $db->FetchRow;
@esskar: Das kann doch so nicht funktionieren.
FetchRow() liefert kein Array, sondern nur
wahr oder
falshc fuer jeden Aufruf. Und es wird dann jeweils
$db->FetchRow() aufgerufen.