Soy nuevo en programación en Perl. Ahora estoy aprendiendo la parte de Programación orientada a objetos en Perl pero se me presenta el siguiente problema con un programa explicativo que encontré en Internet pero me manda el siguiente error:
- Código: Seleccionar todo
Persona.pm did not return a true value at C:\Archivos de programa\OptiPerl53\Webroot\cgi-bin\prueba.cgi line 2.
BEGIN failed--compilation aborted at C:\Archivos de programa\OptiPerl53\Webroot\cgi-bin\prueba.cgi line 2.
La clase es Persona.pm. Aquí no me manda ningún error:
Using perl Syntax Highlighting
package Persona;
use strict; #Nos ponemos serios
sub new {
my $this=shift; #Cogemos la clase que somos o una referencia a la clase (si soy un objeto)
my $class = ref($this) || $this; #Averiguo la clase a la que pertenezco
my $self={}; #Inicializamos la tabla hash que contendrá las var. de instancia (NOMBRE Y EDAD)
$self ->{NOMBRE} =undef ; #La clase Persona nace sin nombre
$self ->{EDAD} =0 ; #La clase Persona se construye con 0 años
bless $self, $class; #Perl nos tiene que dar el visto bueno (bendecirla)
return ($self); #Devolvemos la clase recién construida
}
######################################################################
#Métodos de acceso a los datos de la clase
#
#metodo para ver/cambiar el nombre
sub nombre{
my $self=shift; #El primer parámetro de un metodo es la clase
#Miramos si se le ha pasado algún parámetro, en cuyo caso será el nombre
$self->{NOMBRE}=shift if (@_);
#Devolvemos el nombre
return $self->{NOMBRE};
}
#metodo para ver/cambiar la edad
sub edad{
my $self=shift; #El primer parámetro de un metodo es la clase
#Miramos si se le ha pasado algún parámetro, en cuyo caso será la edad
$self->{EDAD}=shift if (@_);
#Devolvemos el nombre
return $self->{EDAD};
}
######################################################################
#Métodos de la clase
#
#metodo para cumplir años
sub cumple{
my $self=shift; #El primer parámetro de un metodo es la clase
#Incrementamos la edad
$self->{EDAD}++;
#Devolvemos el nombre
return $self->{EDAD};
}
######################################################################
#Destructor
#
sub DESTROY {
my $self=shift; #El primer parámetro de un metodo es la clase
delete ($self->{NOMBRE});
delete ($self->{EDAD});
}
#Fin
use strict; #Nos ponemos serios
sub new {
my $this=shift; #Cogemos la clase que somos o una referencia a la clase (si soy un objeto)
my $class = ref($this) || $this; #Averiguo la clase a la que pertenezco
my $self={}; #Inicializamos la tabla hash que contendrá las var. de instancia (NOMBRE Y EDAD)
$self ->{NOMBRE} =undef ; #La clase Persona nace sin nombre
$self ->{EDAD} =0 ; #La clase Persona se construye con 0 años
bless $self, $class; #Perl nos tiene que dar el visto bueno (bendecirla)
return ($self); #Devolvemos la clase recién construida
}
######################################################################
#Métodos de acceso a los datos de la clase
#
#metodo para ver/cambiar el nombre
sub nombre{
my $self=shift; #El primer parámetro de un metodo es la clase
#Miramos si se le ha pasado algún parámetro, en cuyo caso será el nombre
$self->{NOMBRE}=shift if (@_);
#Devolvemos el nombre
return $self->{NOMBRE};
}
#metodo para ver/cambiar la edad
sub edad{
my $self=shift; #El primer parámetro de un metodo es la clase
#Miramos si se le ha pasado algún parámetro, en cuyo caso será la edad
$self->{EDAD}=shift if (@_);
#Devolvemos el nombre
return $self->{EDAD};
}
######################################################################
#Métodos de la clase
#
#metodo para cumplir años
sub cumple{
my $self=shift; #El primer parámetro de un metodo es la clase
#Incrementamos la edad
$self->{EDAD}++;
#Devolvemos el nombre
return $self->{EDAD};
}
######################################################################
#Destructor
#
sub DESTROY {
my $self=shift; #El primer parámetro de un metodo es la clase
delete ($self->{NOMBRE});
delete ($self->{EDAD});
}
#Fin
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Y el programa es prueba.cgi:
Using perl Syntax Highlighting
#use strict;
use Persona;
#Creamos un objeto del tipo persona
my $uno= Persona->new();
#Vamos a darle un nombre a ese objeto, usando el método nombre
$uno->nombre("Richal");
#También vamos a darle una edad, usando el método edad
$uno->edad(23);
#Mostramos la edad y el nombre
print $uno->nombre." tiene ".$uno->edad. " años \n";
#¿Y si hoy fuera su cumpleaños?
$uno->cumple;
#Mostramos la edad y el nombre
print $uno->nombre." acaba de cumplir ".$uno->edad. " años \n";
use Persona;
#Creamos un objeto del tipo persona
my $uno= Persona->new();
#Vamos a darle un nombre a ese objeto, usando el método nombre
$uno->nombre("Richal");
#También vamos a darle una edad, usando el método edad
$uno->edad(23);
#Mostramos la edad y el nombre
print $uno->nombre." tiene ".$uno->edad. " años \n";
#¿Y si hoy fuera su cumpleaños?
$uno->cumple;
#Mostramos la edad y el nombre
print $uno->nombre." acaba de cumplir ".$uno->edad. " años \n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Estoy usando :
- Código: Seleccionar todo
ActivePerl-5.8.8.820-MSWin32-x86-274739
OptiPerl-5.3
Y no sé qué debo hacer para que no me mande ese error, disculpen la ignorancia pero este error me trae loco.