[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