Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7244[/thread]

array of hash ?!?

Leser: 2


<< >> 10 Einträge, 1 Seite
DocJunioR
 2005-08-30 13:51
#57534 #57534
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
Also ich möchte eine Ansammlung von Hashes aus einer Funktion zurückgeben.
Das sollte ja kein Problem sein. Müsste ja ála

Code: (dl )
1
2
3
    push(@output, %splitstring);

return \@output;


laufen.

So weit, so gut.
Nun das aufrufende Progamm...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
my @data  = @{$cuser->get (\%find)};

my $i;
my %line;

for ($i = 0; $i < @data; $i++)
{
%line = $data[$i];
print $i.")".$line{'pass'}."\n";
}


Wie kann ich jetzt dem Programm klar machen, daß mein $data[$i] ein hash ist?
Ronnie
 2005-08-30 14:02
#57535 #57535
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=DocJunioR,30.08.2005, 11:51]Also ich möchte eine Ansammlung von Hashes aus einer Funktion zurückgeben.
Das sollte ja kein Problem sein. Müsste ja ála
Code: (dl )
1
2
    push(@output, %splitstring);
return \@output;

laufen.
(...)
Wie kann ich jetzt dem Programm klar machen, daß mein $data[$i] ein hash ist?[/quote]
Code: (dl )
1
2
    push(@output, \%splitstring); # hashref instead of flat list
return \@output;

Du muss Referenzen in das Array übernehmen statt versuchen den Hash direkt in das Array zu pushen. Dies kann nicht funktionieren, da in diesem Fall der Hash als Liste in das Array genommen wird.
Code: (dl )
my %hash = %{$data[$i]};
Relais
 2005-08-30 14:05
#57536 #57536
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=DocJunioR,30.08.2005, 11:51]Also ich möchte eine Ansammlung von Hashes aus einer Funktion zurückgeben.
Das sollte ja kein Problem sein. Müsste ja ála
Code: (dl )
1
2
3
    push(@output, %splitstring);

return \@output;
laufen.[/quote]
Das tut etwas anderes.
Code: (dl )
1
2
3
    push(@output, { %splitstring }); # hier wird eine Referenz auf einen anonymen Hash mit dem Inhalt aus %splitstring angefügt.

return \@output;


Quote
So weit, so gut.
Nun das aufrufende Progamm...

Code: (dl )
    %line = $data[$i];


Wie kann ich jetzt dem Programm klar machen, daß mein $data[$i] ein hash ist?


Code: (dl )
    %line = %{ $data[$i] }; # dereferenziert es wieder und kopiert den Inhalt in %line.


perldoc perllol, perldoc perldsc, perldoc perlref erklären's ausführlicher.
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
DocJunioR
 2005-08-30 14:29
#57537 #57537
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
also sollte das dann so aussehen?
Code: (dl )
1
2
3
4
5
for ($i = 0; $i < @data; $i++)
{
    %line = %{ $data[$i] };
        print $i.")".$line{'pass'}."\n";
}


Da bekomm ich dann nen Fehler "use of uninitialized Value" beim print\n\n

<!--EDIT|DocJunioR|1125398328-->
Ronnie
 2005-08-30 14:45
#57538 #57538
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=DocJunioR,30.08.2005, 12:29]also sollte das dann so aussehen?
(...)[/quote]
nein, das ist C-Style und nicht nötig:
Code: (dl )
1
2
3
for my $hash_ref (@data) {
print $hash_ref->{'pass'}, "\n" if exists $hash_ref->{'pass'};
}
DocJunioR
 2005-08-30 14:58
#57539 #57539
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
ah, verstehe.. :)
DocJunioR
 2005-08-31 16:58
#57540 #57540
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
Auf ein Wort, Killer:

Ich hab ein Problem mit meinem %splitstring.
Ich versorge es in einer Schleife mit Werten.
Ergo so
Code: (dl )
1
2
3
4
5
6
    for $row (@array)
{
%splitstring = unstring($row);

# hier kommt dann meine Prüfung..
}


Wenn man sich das genauer ansieht, wird einem klar, daß man mit dem oben beschriebenen push (@output, \%splitstring) immer die Adresse des Hashes Splitstring im Speicher auf den Array schiebt.
Diese ändert sich aber nie. Ergo hab ich am Ende als Ergebnisliste nur das, was im Letzten Durchlauf als %splitstring galt.
Kann ich perl sagen, daß er jedes mal eine neue Adresse allokiert?
renee
 2005-08-31 17:09
#57541 #57541
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
schau Dir Relais' Antwort an...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
DocJunioR
 2005-08-31 17:22
#57542 #57542
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
[quote=renee,31.08.2005, 15:09]schau Dir Relais' Antwort an...[/quote]
ich glaube, ich brauch dringend Urlaub...
pq
 2005-08-31 19:20
#57543 #57543
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=DocJunioR,31.08.2005, 14:58]Kann ich perl sagen, daß er jedes mal eine neue Adresse allokiert?[/quote]
perldoc -f my
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
<< >> 10 Einträge, 1 Seite



View all threads created 2005-08-30 13:51.