/ / Foreach-Array mit Perl - Arrays, Perl, Hash, Foreach

Foreach-Array mit Perl - Arrays, Perl, Hash, Foreach

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"; }