Mar Ago 16, 2005 3:34 am
|
 |
serruxa
Perlero Nuevo

|
Registrado: 16 Ago 2005
Mensajes: 5
|
|
| Clases en perl |
|
|
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 |
|
|
|
Mar Ago 16, 2005 4:58 am
|
 |
Joaquin
Perlero Nuevo

|
Registrado: 13 Ago 2005
Mensajes: 12
Ubicación: Valladolid, España
|
|
| Re: Clases en perl |
|
|
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;
|
|
|
Mar Ago 16, 2005 7:37 am
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
|
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 |
|
Mar Ago 16, 2005 11:28 am
|
 |
Joaquin
Perlero Nuevo

|
Registrado: 13 Ago 2005
Mensajes: 12
Ubicación: Valladolid, España
|
|
|
|
|
| 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.
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. |
|

Mar Ago 16, 2005 11:44 am
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
| Re: Clases en perl |
|
|
| 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, |
|

Mie Ago 17, 2005 2:10 am
|
 |
serruxa
Perlero Nuevo

|
Registrado: 16 Ago 2005
Mensajes: 5
|
|
|
|
|
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  |
|

Mie Ago 17, 2005 9:39 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
| serruxa escribió: | Muchas gracias por vuestra ayuda, supongo que consultare este foro con bastante frecuencia  |
Y si por ahí ves a alguien que necesita ayuda de perl, recomiendales el foro
SALUDOS |
|
Powered by phpBB © 2001, 2005 phpBB Group
|