[ ] 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.
In reply to Re^4: Newbies question: initializing data structure
by almut
in thread Newbies question: initializing data structure
by roibrodo
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |