• Publicidad

Nombres de archivo y clases en Perl

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Nombres de archivo y clases en Perl

Notapor sergiarcano » 2012-12-18 04:49 @243

Buenos días a todos.

Una pregunta rápida y sencilla: a la hora de realizar una clase el nombre de la clase tiene que coincidir exactamente con el nombre del archivo, añadiendo a este la extensión .pm, ¿verdad?

Me solicitan si es posible (no lo saben seguro) que el nombre del paquete sea por ejemplo este:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. package Intercambio;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


y el nombre del archivo correspondiente sea "Intercambio.class.pm" para poder llamarlo y usarlo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Intercambio.class;
  2.  
  3. $inter=Intercambio->new(xxx);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Yo ya he contestado a la petición que creo que no es posible, pero tampoco me queda seguro (en todos los ejemplos se define exactamente igual y me suena que es un requisito, pero no encuentro dónde lo leí para asegurarme).

Saludos.
sergiarcano
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2012-11-28 10:18 @471

Publicidad

Re: Nombres de archivo y clases en Perl

Notapor explorer » 2012-12-18 10:17 @470

En Perl... hay pocas cosas que son imposibles :)

El módulo lo puedes llamar Intercambio_class.pm, y en su interior, puedes crear objetos que pertenezcan a la clase que tu quieras:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. package Intercambio;
  3.  
  4. sub new {
  5.     my $self = {};
  6.     bless $self, 'Intercambio';
  7.     return $self;
  8. }
  9.  
  10. 1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y luego, en el programa,
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3.  
  4. use Intercambio_class;
  5.  
  6. my $inter = Intercambio->new();
  7.  
  8. use Data::Dumper;
  9.  
  10. say Dumper $inter;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
La salida demuestra que $inter es un objeto que pertenece a la clase 'Intercambio'. bless() se traduce por 'bendecir', aunque lo más apropiado en este caso sería traducirlo por 'bautizar', porque en ese momento le damos un nombre.

Pero, aunque esto se puede hacer así, habría problemas en el futuro si queremos hacer cosas como la herencia entre clases. No digo que no se pueda hacer, pero habría que buscar la sintaxis correcta para que funcionase. Más información en tu propio ordenador en perldoc perlobj, y en la Web (traducido).

Casi mejor si se queda así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. package Intercambio;
  3.  
  4. sub new {
  5.     my $class = shift;
  6.     my $self = {};
  7.     bless $self, $class;      
  8.     return $self;
  9. }
  10.  
  11. 1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y así el objeto tiene la clase de la que fue invocada.

Eso de llamarlo Intercambio.class.pm... suena a que quien te lo ha mandado sabe programar en Java :) Si se quiere especificar en el nombre qué es lo que contiene ese módulo, pues entonces se genera una división completa. Por ejemplo: Intercambio::Clases, que será un módulo que está escrito en el archivo Intercambio/Clases.pm.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Nombres de archivo y clases en Perl

Notapor sergiarcano » 2012-12-19 03:30 @187

Buenas,

Sí, la clase y el constructor los había construído de una forma similar.

Ya he comentado el tema del nombre, pero prefiere hacerlo así para "separar lo que son módulos simples de las clases..." No veo la necesidad de dicha separación porque tampoco veo la lógica de tener módulos de esa forma cuando podrían ser clases "heredables", pero eso ya...

En fin, dicho queda, pero no decido yo.

Muchas gracias.
sergiarcano
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2012-11-28 10:18 @471


Volver a Básico

¿Quién está conectado?

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