Well, this is hardly fun, but...
Jason Foster <[EMAIL PROTECTED]> wrote:
>Can anyone help me to understand why this code refuses to compile?
>Even better, can anyone help fix it :)
>
> %hash = qw( fred filntstone barney rubble tom delong );
> print( keys( reverse( %hash ) ) );
>
>The error message...
>
> Type of arg 1 to keys must be hash (not reverse) at ./killme.pl
>line 4, near ") ) "
keys() only accepts a hash as an argument. reverse() returns a list. So
you are trying to execute keys() on a list, which results in the error.
>... was pretty confusing since it implies that "reverse" is a type?!
>
>I tried making an anonymous hash as follows...
>
> print( keys( %{ reverse( %hash ) } ) );
You are trying to dereference something which is not a reference. You
are not creating an anonymous hash at all. The operator which creates an
anonymous hash is {}, not %{}. So first, create the reversed hash
{ reverse %hash }
*then* dereference it
%{ { reverse %hash } }
But that is so ugly it doesn't bear looking at.
Better to go with
my %r_hash = reverse %hash;
if you sure you are really trying to reverse the key/value pairs.
--
Cheers,
Bernard