[Perl] Pasando un hash (entregad o por un método) a keys

Gunnar Wolf gwolf@gwolf.cx
Fri, 22 Aug 2003 10:37:01 -0500


Hola,

Esta me tiene completamente en blanco, espero que alguno de ustedes
pueda echarme una mano: Tengo una función que regresa un hash:

    return map { $_=>$authors->{$_}->{'mention_order'} } keys %$authors;

Ahora, en determinado punto quiero usar únicamente las llaves,
descartando los valores. Me funciona así:

my %tmp = get_authors;
my @authors = keys %tmp;

Pero, obviamente, se ve horrible, y no me gusta estar creando variables
innecesarias. Ahora, si hago:

my @authors = keys(get_authors());

Perl me dice que:

Type of arg 1 to keys must be hash (not subroutine entry)

De hecho, hice un one-liner para demostrar la generalidad de esta bronca:

$ perl -e 'sub dameHash {my %h=(1=>2,3=>4); return %h}; print keameHash'
Type of arg 1 to keys must be hash (not subroutine entry) at -e line 1, at EOF
Execution of -e aborted due to compilation errors.

O sea que... ¡Ni siquiera llega a evaluarlo! :-( keys necesita, a tiempo
de compilación, ir junto a un hash real - ¿Por qué?

¿Hay alguna manera de sacarle la vuelta a esto, que suena tan poco Pérlico?

Saludos,

-- 
Gunnar Wolf - gwolf@gwolf.cx - (+52-55)5630-9700 ext. 1366
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF