• Publicidad

Clases en perl

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Clases en perl

Notapor serruxa » 2005-08-16 04:34 @232

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
serruxa
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2005-08-16 04:28 @228

Publicidad

Re: Clases en perl

Notapor Joaquin » 2005-08-16 05:58 @290

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
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use lib 'camino a clases';
  2. use clases::conexion;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Joaquin
 

Notapor monoswim » 2005-08-16 08:37 @400

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
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor Joaquin » 2005-08-16 12:28 @561

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

Pues tengo la sensación de que estamos en el 1% de inseguridad. :D
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.
Joaquin
 

Re: Clases en perl

Notapor Perl user » 2005-08-16 12:44 @572

serruxa escribiste: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,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor serruxa » 2005-08-17 03:10 @174

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:
serruxa
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2005-08-16 04:28 @228

Notapor kidd » 2005-08-17 10:39 @485

serruxa escribiste: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
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 23 invitados