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

Gunnar Wolf gwolf@gwolf.cx
Fri, 22 Aug 2003 19:32:05 -0500


Salvador Ortiz Garcia dijo [Fri, Aug 22, 2003 at 02:48:15PM -0500]:
> On Fri, 2003-08-22 at 10:37, Gunnar Wolf wrote:
> > Hola,
> > 
> > Esta me tiene completamente en blanco, espero que alguno de ustedes
> > pueda echarme una mano: Tengo una función que regresa un hash:
> 
> Las funciones en perl _no_ pueden regresar hashes! (solo escalares o
> listas de los mismos).

Urk... Y hasta ahora yo había creído que las listas al ser evaluadas se
convertían mágicamente en hashes y eran perfectamente intercambiables.
:-/ 

> > 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'
> 
> Igual, tu dameHash regresa una lista.
> 
> > 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é?
> 
> La sintaxis es 'keys HASH' y no 'keys LIST'


Eip, es lo que veo... pero bueno, me dejó bastante sorprendido -
Normalmente en Perl estas cosas se hacen en tiempo de ejecución. Me
sorprendió que fuera el _compilador_ el que me dijera que eso no puede ser.

En fin, te agradezco tu ayuda - a fin de cuentas lo resolví de una
manera bastante más específica a lo que estoy haciendo, sin usar las
ideas que me pasaste. Pero bueno, ayuda entenderlo :)

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