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

Reply via email to