Hola a todos.
Querría pedirles un poco de ayuda pues no encuentro respuesta a mi problema. Llevo estudiando Perl unas semanas y se puede decir que todavía soy un novato en Perl, pero cuanto más estudio este lenguaje, más me doy cuenta de su potencial y por eso quiero seguir aprendiendo cosas...
Acostumbrado a la programación orientada a objetos, y después de haber estudiado la parte básica de un
tutorial de Perl que poseo, he decidido empezar a crear algunas clases...
Mi problema viene cuando creo referencias/objetos de las clases que he creado. Si bien puedo crear uno, cuando creo más de un objeto obtengo un error en mi código y no sé por qué puede pasar esto... ¿Es que no se puede crear más de un objeto de la misma clase usando Perl?
Les paso el código que he creado por si me podrían decir qué estoy haciendo mal.
Esta es mi clase:
Using perl Syntax Highlighting
#!/usr/bin/perl
#use strict;
package Gato;
# Atributos de la clase
my $cantidad = 0;
# Constructor y Destructor
sub new {
my $clase = shift;
my $gato = {@_};
#atributos de la instancia
$gato->{nombre} ||= undef;
$gato->{hambre} ||= 5;
$gato->{cansancio} ||= 5;
$cantidad++;
bless $gato,$clase;
return $gato;
}
sub DESTROY {
$cantidad--;
}
# Accesores(get) y mutadores(set)
sub get_nombre { my $gato = shift; return $gato->{nomnbre}; }
sub get_hambre { my $gato = shift; return $gato->{hambre}; }
sub get_cansancio { my $gato = shift; return $gato->{cansancio}; }
sub set_nombre {
my $gato = shift;
my $nombre = shift;
$gato->{nombre} = $nombre;
return 1;
}
sub set_hambre {
my $gato = shift;
my $hambre = shift;
$gato->{hambre} = $hambre;
return 1;
}
sub set_cansancio {
my $gato = shift;
my $cansancio = shift;
$gato->{cansancio} = $cansancio;
return 1;
}
# Métodos de la instancia
#Si el gato come el nivel de hambre disminuye
sub come {
my $gato = shift;
$gato->{hambre}--;
}
#si el gato juega el nivel de cansancio aumenta
sub juega {
my $gato = shift;
$gato->{cansancio}++;
}
#si el gato duerme el nivel de cansancio disminuye
sub duerme {
my $gato = shift;
$gato->{cansancio} -= 2;
}
#si el gato vomita el nivel de hambre aumenta
sub vomita{
my $gato = shift;
$gato->{hambre} += 2;
}
#Muesta el estado actual (nombre, nivel de hambre y cansancio) de un gato
sub estado {
my $gato = shift;
print "\nNombre del gato : ",$gato->{nombre};
print "\nNivel de hambre : ",$gato->{hambre};
print "\nNivel de cansancio : ",$gato->{cansancio};
print "\n\n";
}
return 1;
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Y esta la clase que uso para crear objetos de la clase Gato en ella:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
package Gato;
use Gato
my $gato1 = Gato->new(nombre=>"Isidoro", hambre=>10, cansancio=>10);
my $gato2 = Gato->new(nombre=>"Misifu", hambre=>3, cansancio=>7);
print "\nEstado actual del gato: ";
$gato2->estado();
print "\nEstado actual de cansancio del gato: ",$gato2->get_cansancio();
print "\nEl gato duerme"; $gato2->duerme();
print "\nEstado de cansancio del gato después de dormir: ",$gato2->get_cansancio();
print "\n\n";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
La cuestión es que si creo sólo al objeto
$gato2 y uso sus métodos, el ejemplo que me he creado funciona correctamente, pero cuando intento usar un método de la clase usando el objeto
$gato1, todo deja de funcionar...
¿Qué es lo que estoy haciendo mal?
Muchas gracias de antemano por su ayuda y felicidades al creador de esta página. ¡¡¡Me parece un sitio perfecto para ir mejorando mis habilidades en Perl!!! ^_^