Auslesen eines Hash of Arrays
Hallo NG,
beim Lesen aus einem Hash of Arrays fiel mir auf, dass eine direkte
Zuweisung an ein Array (s.u.) nicht funktioniert. Warum? Wird
"= $lists{$name}" als skalarer Kontext interpretiert?
# ------------------------------------------
foreach $name (sort keys %lists) {
print $name:\n";
# [at] paths = $lists{$name}; # schlägt fehl
[at] paths = [at] {$lists{$name}}; # funktioniert
print "$name:\n";
foreach my $path ( [at] paths) {
print "\t$path\n";
}
}
# ------------------------------------------
Grüße,
Mark
--
Laut Statistiken der WHO fuehren nur 0.4% aller sexuellen Kontakte zur
Geburt eines Kindes. Fuer strengglaeubige Stochastiker ist das kein
signifikanter Zusammenhang, so dass wir uns also zufaellig doch
vermehren. [Jörg Dorchain in dasr]
Re: Auslesen eines Hash of Arrays
Mark Neis wrote:
> beim Lesen aus einem Hash of Arrays fiel mir auf, dass eine direkte
> Zuweisung an ein Array (s.u.) nicht funktioniert.
Was heißt das "hat nicht funktioniert"?
> Warum? Wird "= $lists{$name}" als skalarer Kontext interpretiert?
Der Kontext wird durch die linke Seite der Zuweisung bestimmt.
> # ------------------------------------------
> foreach $name (sort keys %lists) {
> print $name:\n";
>
> # [at] paths = $lists{$name}; # schlägt fehl
> [at] paths = [at] {$lists{$name}}; # funktioniert
Wenn $lists{$name} eine Arrayreferenz ist, ist die zweite
Schreibweise richtig, die erste falsch. Perl dereferenziert
eine Array-Referenz nicht, weil sie in einem Arraykontext
steht, und das ist auch richtig so.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Auslesen eines Hash of Arrays
Frank Seitz schrieb:
>Mark Neis wrote:
>
>> beim Lesen aus einem Hash of Arrays fiel mir auf, dass eine direkte
>> Zuweisung an ein Array (s.u.) nicht funktioniert.
>
>Was heißt das "hat nicht funktioniert"?
Es steht dann so was wie ARRAY(0x056715) da.
>> # [at] paths = $lists{$name}; # schlägt fehl
>> [at] paths = [at] {$lists{$name}}; # funktioniert
>
>Wenn $lists{$name} eine Arrayreferenz ist, ist die zweite
>Schreibweise richtig, die erste falsch. Perl dereferenziert
>eine Array-Referenz nicht, weil sie in einem Arraykontext
>steht, und das ist auch richtig so.
Aha.
Mark
--
Laut Statistiken der WHO fuehren nur 0.4% aller sexuellen Kontakte zur
Geburt eines Kindes. Fuer strengglaeubige Stochastiker ist das kein
signifikanter Zusammenhang, so dass wir uns also zufaellig doch
vermehren. [Jörg Dorchain in dasr]