Auslesen eines Hash of Arrays
am 28.09.2006 02:08:01 von Mark Neis
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";
# @paths = $lists{$name}; # schlägt fehl
@paths = @{$lists{$name}}; # funktioniert
print "$name:\n";
foreach my $path (@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
am 28.09.2006 05:25:47 von Frank Seitz
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";
>
> # @paths = $lists{$name}; # schlägt fehl
> @paths = @{$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
am 28.09.2006 12:24:30 von Mark Neis
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.
>> # @paths = $lists{$name}; # schlägt fehl
>> @paths = @{$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]