Perl-Ref -> Wie bekomme ich die Daten aus dem Array?? =))
Aquariophile
- perl
Hallo!
Diese komischen referenzen in Perl machen mir grad zu schaffen....
Klaro könnte ich die Daten auch direkt in der Schleife verarbeiten, aber aus bestimmten anlass will ich das erst spaeter.
Bitte sagt mir wieso das so nicht geht wie ich das versuche.
ne besser, sagt mir bitte _wie_ es geht *g*
Danke!
Aquariophile
PS.: Data::Dumper war interessant brachte mir aber nix ;p))
#!/usr/bin/perl
use DBI;
use strict;
print "Content-type: text/html\n\n";
my $dbh = DBI->connect('DBI:mysql:database=foobar;host=localhost', 'user', 'passwd');
my $sth = $dbh->prepare("SELECT vorname, nachname, telephon FROM tabelle WHERE vorname LIKE ?");
$sth->execute("%");
my @array;
while (my ($vorname, $nachname, $telephon) = $sth->fetchrow_array)
{
push(@array, {vorname=>$vorname, nachname=>$nachname, telephon=>$telephon});
}
print $$array[2]{vorname}; # Vom 2. Suchergebnis der Vorname
print $$array[4]{vorname}; # Vom 4. Suchergebnis das Telephon
while(@array)
{
print $$_{vorname};
print $$_{nachname};
print $$_{telephon};
}
Hallo,
Bitte sagt mir wieso das so nicht geht wie ich das versuche.
ne besser, sagt mir bitte _wie_ es geht *g*
Ich denke, am besten ist, wenn Du weißt, wo Du nachlesen kannst, wie es geht:
1.) Optimalerweise auf dem eigenen Rechner mit
perldoc perldsc
2.) Alternativ online unter
http://www.perldoc.com/perl5.8.0/pod/perldsc.html
Grüße
Klaus
#!/usr/bin/perl
#!/usr/bin/perl -w
Die Warnungen können helfen, gerade dann wenn man mal überhaupt nicht wieter weiss.
use DBI;
use strict;print "Content-type: text/html\n\n";
Da du kein HMTL ausgibst, aber trotzdem eine CGI Anwendung (ist das notwendig?) schreibst, wäre hier wohl ein text/plain angebrachter.
$sth->execute("%");
Was macht denn das % Zeichen?
my @array;
while (my ($vorname, $nachname, $telephon) = $sth->fetchrow_array)
{
push(@array, {vorname=>$vorname, nachname=>$nachname, telephon=>$telephon});
}print $$array[2]{vorname}; # Vom 2. Suchergebnis der Vorname
print $$array[4]{vorname}; # Vom 4. Suchergebnis das Telephon
Du benutzt doch ein Array und keine Referenz.
print $array[index]->{vorname}; # Vom 2. Suchergebnis der Vorname
while(@array)
???
Die Referenz auf dein array dürfte immer wahr sein. Ein while erschient mir hier ungünstig, es sei denn du möchtest das array leeren:
while(shift @array)
Du willst (und musst in diesem Falle) eine foreach Schleife benutzen.
{
print $$_{vorname};
print $$_{nachname};
print $$_{telephon};
}
print $_->{vorname}. $_->{nachname} . $->{telephon} foreach(@array);
Struppi.
use Mosche;
PS.: Data::Dumper war interessant brachte mir aber nix ;p))
Warum? Du musst lernen zu verstehen, wie die Datenstruktur aufgebaut ist, und wie du da dran kommst. Da hilft die Data::Dumper;
while (my ($vorname, $nachname, $telephon) = $sth->fetchrow_array)
{
push(@array, {vorname=>$vorname, nachname=>$nachname, telephon=>$telephon});
}
Wenn du so einen Hash füllst, geht auch:
while (my $hashref = $sth->fetchrow_hashref) {
push (@array, $hashref); # # schlüssel = spaltenname
}
print $$array[2]{vorname}; # Vom 2. Suchergebnis der Vorname
Falsch: vom dritten.
print $$array[4]{vorname}; # Vom 4. Suchergebnis das Telephon
Falsch: vom fünften.
use Tschoe qw(Matti);
Hallo,
Wenn du so einen Hash füllst, geht auch:
while (my $hashref = $sth->fetchrow_hashref) {
push (@array, $hashref); # # schlüssel = spaltenname
}
Ich bin mir nicht sicher, aber könnte es nicht sein, daß es passieren kann, daß wenn Du Deinen Code ausführst, alle Arrayelemente auf den letzten Dtaensatz verweisen, wenn das DBI-Modul geändert wird?
<cite source="perldoc DBI">
Currently, a new hash reference is returned for each row. This will change in the future to return the same hash ref each time, so don't rely on the current behaviour.
</cite>
Grüße
Klaus
use Mosche;
while (my $hashref = $sth->fetchrow_hashref) {
push (@array, $hashref); # # schlüssel = spaltenname
}
Ich bin mir nicht sicher, aber könnte es nicht sein, daß es passieren kann, daß wenn Du Deinen Code ausführst, alle Arrayelemente auf den letzten Dtaensatz verweisen, wenn das DBI-Modul geändert wird?
<cite source="perldoc DBI">
Currently, a new hash reference is returned for each row. This will change in the future to return the same hash ref each time, so don't rely on the current behaviour.
</cite>
Möglich, ich hatte mich beim Schreiben dieses Codes auf meinen Kopf verlassen, und der ist in solchen Dingen nicht sehr zuverlässig (vor allem, weil ich _so_ noch nie gearbeitet habe, habe es nur in meinem Perl-DBI Buch irgendwann mal gelesen).
use Tschoe qw(Matti);