[Madrid-pm] Subrutina exportada pero no encontrada

DervishD bugs en dervishd.net
Mie Ago 8 10:58:58 PDT 2007


    Hola :)

    Otra pregunta rarita de las mías ;) Es más curiosidad que otra cosa.
Estoy modificando un módulo de cosas de excepciones que escribí en su
momento, para aprender algo más, y me he encontrado con una cosa
curiosa.

    Supongamos que yo tengo un módulo, que tiene una subrutina. Esa
subrutina recibe como primer parámetro el nombre de una clase. Lo fácil
es hacer esa subrutina un método de la clase raiz y santas pascuas. Así
lo tengo hecho ahora y funciona.

    La modificación que he intentado es la siguiente: por cuestiones de
comodidad de uso y de un cambio en el diseño, ya no me interesa que esa
subrutina sea un método de la clase raiz, sino que quiero que no esté
asociada a ninguna clase, ya que ahora el parámetro que recibirá puede
ser CUALQUIER clase, no obligatoriamente una derivada de la clase raiz
que he mencionado. Fácil también: exporto esa subrutina al package main
usando "Exporter".

    El problema: si hago lo siguiente:

    use strict;
    use warnings;
    use Excepciones;  # Exporta "subrutina"
    
    package MiExcepcion;
    use base qw( Excepcion::Base );
    1;

    package main;

    subrutina "Una::Clase::Cualquiera"; # Esto funciona
    subrutina MiExcepcion;              # Esto no
    main::subrutina MiExcepcion;        # Esto si, claro, pero qué
                                        #  sintaxis más fea....

    Lo último no funciona porque el intérprete intenta buscar
"subrutina" en "MiExcepcion" o alguno de sus padres, cuando yo pensaba
que intentaría buscar antes de nada en el paquete actual. ¿Hay alguna
forma de hacer que el intérprete busque en los símbolos del paquete
actual antes de intentar buscar en las clases (o sea, en los otros
paquetes)? Me estoy colando en algo gordo del tema de objetos en Perl?

    Ya que lo que pretendo es poder hacer "subrutina CLASE", y esto se
puede conseguir haciendo "subrutina" método de "CLASE" y usando luego la
"indirect syntax": sabéis si esa sintáxis se seguirá soportando durante
algún tiempo? Deduzco que en Perl 6 no, pero estaba pensando más bien en
Perl 5.10, por ejemplo...

    Muchas gracias y no paséis calor :))))

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
It's my PC and I'll cry if I want to... RAmen!


Más información sobre la lista de distribución Madrid-pm