Simon Tomlinson wrote:

> Hi
> 
> I want to put a hash into each element of an array.  I do it like the
> following bit of code.  When I iterate round my hash before putting it in
> the array of the hash values/keys are there.  However, when I iterate
> through the hash after putting it in the array all i get is '4/8' as the
> ouput.
> 
> I am sure this is very simple and I'm doing something stupid.  Does anyone
> have any ideas?
> 
> Thanks in advance,
> Simon.
> 
> my @array
> my $count = 0;
> my $maxCount = 4;
> 
> while $count < $maxCount
> {
>     my %myHash = &getHash;
> 
>     foreach $key (keys %myHash )
>     {
>        print "THIS WORKS: $key $myHash{$key}\n";
>     }
> 
>     # Now assign the hash to my array
>     $array[$count] = %myHash;
> 

the '4/8' thingy you see if coming from the above line. the reason:

$array[$count] is scalar context
%myHash is list context

you are assigning %myHash into a scalar context. what Perl gives you is the 
ratio of how efficient the hash is used. in your case, it means (in ratio) 
4 out of 8 buckets in your %myHash is used. in other word, your $myHash is 
50% full. you might have remember that if you assign an array to a scalar 
like:

my @array = (1,3,5,7);
my $scalar = @array;

now $scalar contains the number of element in @array. if you assign hash to 
a scalar like:

my %hash = (a=>1, b=>2, c=>3);
my $scalar = %hash

Perl won't convert %hash into array and then assign the number of element to 
$scalar. what Perl will do is give you the ratio of how efficient your hash 
is used. if i run the above, it prints '3/8' which tells me my hash is less 
than 50% full.

david

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to