Schrift
[thread]6688[/thread]

Geht das auch kürzer? Und die Performance?: push @array, Win32::ODBC::Datahash



<< >> 8 Einträge, 1 Seite
pktm
 2005-02-03 19:14
#51543 #51543
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Geht das hier auch kürzer, so in einer Zeile?
Code: (dl )
1
2
3
4
5
6
7
#=> Win32::ODBC
while( $db->FetchRow() ){

my %data = $db->DataHash();
push @daten, \%data;

}


Wil hier muss ich immer eine Variable einführen...

Apropos, wie ist das denn so wenn ich in Schleifen Variablen einsetze. Besser vor der Schleife deklarieren und in der Schleife belegen, bzw. leeren oder eher bei jedem Durchlauf eine Variable anlegen?

mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
esskar
 2005-02-03 19:20
#51544 #51544
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
in der schleife ist schon gut!

Code: (dl )
my @daten = map { { $_->DataHash() } } $db->FetchRow();
Dubu
 2005-02-03 21:20
#51545 #51545
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
@pktm: Vergleiche die folgenden Codes:
Code: (dl )
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]
       ];

Code: (dl )
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:
Code: (dl )
1
2
3
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:
Code: (dl )
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.
esskar
 2005-02-03 21:47
#51546 #51546
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
stimmt mist... bin etwas durch den wind...

OT:
war heute gegen 18:30 von der Arbeit zu Hause (mit dem Bus brauch ich ca. 30 minuten von der Arbeit aus). Als ich vor der Haustür stand, hab ich bemerkt, dass ich meinen Schlüssel vergessen hatte. Also noch mal mit dem Bus zurück. Jetzt bin ich daheim! *arrggghhh*
ptk
 2005-02-04 11:22
#51547 #51547
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Bei der Verwendung von DBI koenntest du
Code: (dl )
$sth->fetchall_arrayref({})

schreiben.
pq
 2005-02-04 17:11
#51548 #51548
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=esskar,03.02.2005, 20:47]war heute gegen 18:30 von der Arbeit zu Hause (mit dem Bus brauch ich ca. 30 minuten von der Arbeit aus). Als ich vor der Haustür stand, hab ich bemerkt, dass ich meinen Schlüssel vergessen hatte. Also noch mal mit dem Bus zurück. Jetzt bin ich daheim! *arrggghhh*[/quote]
naja, sieh es positiv und sei froh, dass du nur 30 minuten brauchst. ich
brauch gut doppelt solange =)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
ptk
 2005-02-04 17:27
#51549 #51549
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=pq,04.02.2005, 16:11][quote=esskar,03.02.2005, 20:47]war heute gegen 18:30 von der Arbeit zu Hause (mit dem Bus brauch ich ca. 30 minuten von der Arbeit aus). Als ich vor der Haustür stand, hab ich bemerkt, dass ich meinen Schlüssel vergessen hatte. Also noch mal mit dem Bus zurück. Jetzt bin ich daheim! *arrggghhh*[/quote]
naja, sieh es positiv und sei froh, dass du nur 30 minuten brauchst. ich
brauch gut doppelt solange =)[/quote]
Für Insider: http://www.stammbahn.de/
pq
 2005-02-04 21:48
#51550 #51550
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=ptk,04.02.2005, 16:27]Für Insider: http://www.stammbahn.de/[/quote]
ah, interessanter link, danke. obwohl ich noch nicht so ganz durchblicke,
wo denn nun haltepunkte sein werden/würden...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 8 Einträge, 1 Seite



View all threads created 2005-02-03 19:14.