• Publicidad

Ayuda con el "global symbol " " requires explicit package...

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

Ayuda con el "global symbol " " requires explicit package...

Notapor akroez » 2011-11-10 14:35 @649

Hola a todos, es mi primer tema aquí.

Soy demasiado novato en esto y necesito ayuda.

Mi problema es que al intentar hacer una clase derivada, heredo de su clase padre, intento definir las nuevas propiedades de la clase derivada y al testear el programa me tira el error "global symbol "$self" requires explicit package at "alumno.pm" at line 35.

El código de alumno es el siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl
  2. package Alumno;
  3.  
  4. use Persona;
  5. @ISA=qw(Persona);
  6.  
  7. use strict;
  8. sub new{
  9.  
  10.         my $this=shift;
  11.         my $class= ref($this) || $this;
  12.        
  13.         my $self=$class->Persona::new("Persona");
  14.        
  15.        
  16.         $self->{_nstudent}=0;
  17.         $self->{_cal_inter}=0;
  18.         $self->{_cal_database}=0;
  19.         $self->{_cal_diferenciales}=0;
  20.         $self->{_cal_circuitos}=0;
  21.         $self->{_cal_bio}=0;
  22.         $self->{_cal_diseno}=0;
  23.        
  24.        
  25.         bless $self, $class;
  26.         return($self);
  27.                
  28. }
  29. sub setidstudent {
  30.     my ( $self, $idstudent ) = @_;
  31.     $self->{_nstudent} = $idstudent if defined($idstudent);
  32.     return $self->{_nstudent};
  33. }
  34.  
  35. sub getidstudent{
  36.        
  37.     my( $self ) = @_;
  38.     return $self->{_nstudent};
  39.            
  40.         }
  41.  
  42.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Los errores que salen son los siguientes:

syntax error at Alumno.pm line 34, near "$self"
syntax error at Alumno.pm line 40, near "}"
Global symbol "$class" requires explicit package name at Alumno.pm line 42.
syntax error at Alumno.pm line 45, near "}"
Can't use global @_ in "my" at Alumno.pm line 51, near "= @_"
Global symbol "$idstudent" requires explicit package name at Alumno.pm line 52.
Global symbol "$idstudent" requires explicit package name at Alumno.pm line 52.
syntax error at Alumno.pm line 54, near "}"
Can't use global @_ in "my" at Alumno.pm line 58, near "= @_"
syntax error at Alumno.pm line 61, near "}"
Alumno.pm has too many errors.
Compilation failed in require at ./sinquehacer.pl line 4.
BEGIN failed--compilation aborted at ./sinquehacer.pl line 4.


Tengo más métodos iguales de set() y get(), asé que si resuelvo esto supongo que los siguientes se resolverían de la misma manera.

De antemano, gracias, espero su pronta respuesta :)
Última edición por akroez el 2011-11-10 19:20 @847, editado 1 vez en total
akroez
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-11-10 14:10 @632

Publicidad

Re: Ayuda con el "global symbol " " requires explicit package...

Notapor explorer » 2011-11-10 16:10 @715

Bienvenido a los foros de Perl en español, akroez.

Lo primero, aconsejarte que te olvides de esta forma de programar en Perl. Lo más moderno es usar Moose, que nos permite tener un modelo de programación orientado a objetos mucho más moderno (y más sencillo y más parecido a como se hace en otros lenguajes).

En cuanto a tu código, veo un problema: en las líneas 13 y 15 estás definiendo dos veces la variable $self.

Por lo que creo entender lo que quieres hacer, primero obtienes un objeto "Persona", en la línea 13, y guardas una referencia a él en la variable $self. Luego, en las líneas 15 a 23, le añades nuevas propiedades, pero la forma de hacerlo no es correcta. Sería algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         $self->{_nstudent}=0;
  2.         $self->{_cal_inter}=0;
  3.         $self->{_cal_database}=0;
  4.         $self->{_cal_diferenciales}=0;
  5.         $self->{_cal_circuitos}=0;
  6.         $self->{_cal_bio}=0;
  7.         $self->{_cal_diseno}=0;
  8.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Es decir, que sobran las líneas 15 y 23.

No he mirado mucho más...
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: Ayuda con el "global symbol " " requires explicit package...

Notapor akroez » 2011-11-10 19:18 @845

Muchas gracias explorer, sabía que serías el primero en responder y vaya de qué forma, prácticamente al instante.

Y sí, de hecho moviéndole al programa en el transcurso entre que publiqué y ahorita que lo acabo de ver, hice justamente lo que me mencionas.

Sobraban esas líneas y las descubrí de "chiripa" como dirían aquí en mi tierra.

Y acerca de lo de Moose, me queda claro que tengo que leer mucho más acerca de Perl, solo que mi curso en la escuela no nos da para mucho, pero sí me intereso todo el potencial de Perl.

Gracias de nuevo.
akroez
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-11-10 14:10 @632


Volver a Básico

¿Quién está conectado?

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