Re: Problem with anonymous array in hash



bernd wrote:

probably the solution is quite simple, but obviously I am blocked
currently concerning the following:

perl -e '@somearr=split(/ /,"11 12 13"); $hash{'array1'}->[0]=50;
$hash{'array1'}->[2]=100;printf("%d\n", scalar(@somearr));
printf("%d\n",
scalar(@$hash{'array1'}))'

Running this on the command line gives:

3
0

The first number is, as expected, the number of elements in the array
since evaluating an array in scalar context gives it's number of
elements. I would have expected "2" as the outcome for the second,
anonymous array stored in the hash, but obviously I am not referencing
to the array, or?

What am I doing wrong?

If you had enabled warnings perl would have given you a hint:

$ perl -we'
@somearr = ( 11, 12, 13 );
$hash{ array1 }[ 0 ] = 50;
$hash{ array1 }[ 2 ] = 100;
printf "%d\n", scalar @somearr;
printf "%d\n", scalar @$hash{ array1 };
'
3
Use of uninitialized value in printf at -e line 6.
0

The problem is that you are dereferencing $hash when you should be
dereferencing $hash{ array1 } like so:

printf "%d\n", scalar @{ $hash{ array1 } };


perldoc perlref



John
--
use Perl;
program
fulfillment
.



Relevant Pages