in reply to Re^3: Newbies question: initializing data structure
in thread Newbies question: initializing data structure
[ ] and { } return an array and a hash reference respectively, i.e. a scalar. That scalar is assigned to the first element of @arr. If you want to fill the array with the elements created by map, you probably just want
my @arr = map { }, 1 .. $arr_len;
or maybe
my $arrayref = [ map { }, 1 .. $arr_len ];
As to the former variant, you can also put parentheses around the list (to make it clear it is a list)
my @arr = ( map { }, 1 .. $arr_len );
but syntactically they're not required in this case.
P.S.: with {map { }, 1..$arr_len} you'd run into problems with an odd-number $arr_len, because hashes need to be initialized from key/value pairs... But using anonymous hashes ({}) as hash keys only is of limited use anyway (they'd end up stringified like 'HASH(0x63aa80)') — and probably not what you meant.
|
|---|