Es scheint, dass mein Code nicht über ein in einem Hash gespeichertes Array iterieren kann.
Was habe ich verpasst ?
#!/usr/bin/env perl
use Data::Dumper;
my $data = {array => ["a", "b", "c"]};
my @array = $data->{array};
print Dumper(@array); # It looks like $data->{array} is an array
print "Ref: ".ref($data->{array})."n"; # And this array is indeed an array
foreach ($data->{array}) { print "$_n"; } # But this doesn"t work
foreach (@array) { print "$_n"; } # Neither this one
# But with a regular array it works...
my @myNames = ("Larry", "Curly", "Moe");
foreach (@myNames) { print "$_n"; }
Meine Ausgabe:
$VAR1 = [
"a",
"b",
"c"
];
$VAR1 = "a";
Ref: ARRAY
ARRAY(0x8002bcf8)
ARRAY(0x8002bcf8)
Larry
Curly
Moe
Ich bin ziemlich verwirrt mit REF / SCALAR-Typen. Manchmal nimmt Perl Werte als Referenzen irgendwann nicht. In diesem Fall, weil ich "ARRAY" von der ref
Funktion, denke ich $->{array}
gibt mir kein Array, sondern einen Verweis auf das Array.
Ich habe es auch versucht @$data->{array}
ohne Erfolg.
Antworten:
2 für die Antwort № 1$data->{array}
ist in der Tat eine Array-Referenz.
Um es zu dereferenzieren, verwenden Sie @{}
auf der Referenz
foreach (@{$data->{array}}) { print "$_n"; }
Bearbeiten:
Oder wenn Sie nicht verwenden möchten {...}
nach @
my $arrayref = $data->{array};
foreach (@$arrayref ) { print "$_n"; }