Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Clases en perl

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Mar Ago 16, 2005 3:34 am
serruxa
Perlero Nuevo
Perlero Nuevo
Registrado: 16 Ago 2005
Mensajes: 5
Clases en perl Responder citando

Hola soy nueva en esto de perl, a ver si me podeis ayudar. Tengo dos clases, una productos.pm y otra conexion.pm, que estan en el directorio "clases" cuando estas clases las voy a utilizar en el main, pongo use clases::productos;
use clases::conexion;
y cuando creo el objeto pongo:
$objProducto = clases::productos->new();
pero al hacer esto me da el siguiente error:
Can't locate object method "new" via package "clases::productos" (perhaps you forgot to load "clases::productos"?)
Alguien puede ayudarme Graciasssss
Mensaje Mar Ago 16, 2005 4:58 am
Joaquin
Perlero Nuevo
Perlero Nuevo
Registrado: 13 Ago 2005
Mensajes: 12
Ubicación: Valladolid, España
Re: Clases en perl Responder citando

Coloca un use strict; y un use diagnostics; para saber más en detalle lo que pasa. Pero apostaría a que @INC no tiene incluído el path al directorio clases. Si ese es el caso, prueba con
Código:
use lib 'camino a clases';
use clases::conexion;
Mensaje Mar Ago 16, 2005 7:37 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

Los :: creo que no significan que está en un subdirectorio !!!!

el :: es para cuando en la clase hacés sub clases como

package uno
...
package uno::hijito

entonces vos hacer

use clases/uno::hijito

my $object = uno::hijito->new();

Se entiende ? estoy un 99%seguro de que es así...

Saludos
Mensaje Mar Ago 16, 2005 11:28 am
Joaquin
Perlero Nuevo
Perlero Nuevo
Registrado: 13 Ago 2005
Mensajes: 12
Ubicación: Valladolid, España
Responder citando

monoswim escribió:
Se entiende ? estoy un 99%seguro de que es así...

Pues tengo la sensación de que estamos en el 1% de inseguridad. Very Happy
Según el libro que me recomendado kidd respondiendome a otra cosa, en la página 42, pone que los '::' se traducirán en el separador de subdirectorios del sistema en que se encuentre el programa.
Mensaje Mar Ago 16, 2005 11:44 am
Perl user
Maestro Honorario
Maestro Honorario
Registrado: 03 Nov 2004
Mensajes: 385
Re: Clases en perl Responder citando

serruxa escribió:
Hola soy nueva en esto de perl, a ver si me podeis ayudar. Tengo dos clases, una productos.pm y otra conexion.pm, que estan en el directorio "clases" cuando estas clases las voy a utilizar en el main, pongo use clases::productos;
use clases::conexion;
y cuando creo el objeto pongo:
$objProducto = clases::productos->new();
pero al hacer esto me da el siguiente error:
Can't locate object method "new" via package "clases::productos" (perhaps you forgot to load "clases::productos"?)
Alguien puede ayudarme Graciasssss


Bueno hay un comentario cierto, que hizo monoswim, por cada nombre que anteceda a '::' significa que debes crear un directorio que represente jerarquicamente a una clase. Pero eso sólo aplica si formalmente quieres definir una clase en un archivo independiente, porque recordemos que podemos definir clases aún en tiempo de ejecución, en fin otro tópico.

Ahora bien lo que '::' significa no es un 'directorio', sino el comienzo de una jerarquía, o simplemente un 'espacio de nombres'.

Creo que en tu caso el problema es que clases::productos no está definido, y puede ser por varios motivos:
1) Como se mencionó debe existir el directorio clases el cual contendrá los archivos conexion.pm, productos.pm, o en caso de que esten definidas todas en el mismo archivo, debes especificar correctamente el espacio de nombres.
2) Tus clases no se encuentran en @INC ( perldoc -q @INC ).

Saludos,
Mensaje Mie Ago 17, 2005 2:10 am
serruxa
Perlero Nuevo
Perlero Nuevo
Registrado: 16 Ago 2005
Mensajes: 5
Responder citando

Hola, ya he solucionado el problema, muchas gracias
Perl no busca todo el disco para encontrar conexion.pm y productos.pm sino que sólo busca en los paths que están definidos en el arreglo global de Perl @INC, entre ellos /usr/local/lib/perl5/site_perl/5.005 y /usr/libdata/perl/5.00503 y también en el directorio donde se encuentra el programa principal.
En este caso tengo un directorio "clases", por ello no encuentra ni conexion.pm, ni productos.pm. Para solucionarlo, al crear ambos paquetes, no vale solo con poner el nombre del paquete sino:
package clases::conexion y en el programa de uso poner tambien
use clases::conexion y $objConexion = clases::conexion->new()
Muchas gracias por vuestra ayuda, supongo que consultare este foro con bastante frecuencia Wink
Mensaje Mie Ago 17, 2005 9:39 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

serruxa escribió:
Muchas gracias por vuestra ayuda, supongo que consultare este foro con bastante frecuencia Wink


Y si por ahí ves a alguien que necesita ayuda de perl, recomiendales el foro Wink


SALUDOS
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group