elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  duda de novato con perl
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda de novato con perl  (Leído 3,340 veces)
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
duda de novato con perl
« en: 11 Febrero 2014, 02:51 am »

Hola a todos.

Estoy intentando aprender un poco de perl, para ello estoy leyendo varios manuales etc. por internet.

Bien mi duda es sobre como usar local. Entiendo para que sirve, he intentado usarla de todas formas posibles y siempre meda en mismo error:
"Global symbol "..." requires explicit package name at stringanimal.pl line 3".
Incluso he copiado código que he encontrado googleando y nada.

Mi pregunta es entonces cómo se usa "local".
Y lo mismo para variables que no son ni local ni my? (sin nada)

Gracias.


« Última modificación: 11 Febrero 2014, 11:31 am por SARGE553413 » En línea

fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: duda de novato con perl
« Respuesta #1 en: 11 Febrero 2014, 12:27 pm »

Ese error te lo da porque incluyes use strict o una versión de perl que lo contiene (use v5.11, o superiores).

Ademas local lo tienes que usar en un bloque privado y la variable con el mismo nombre no tiene que estar declarada con my. ej:

Código
  1. use feature 'say'; # Para imprimir con say (Mucho mejor en mi opinion y te hace el salto de linea solo.)
  2.  
  3. $numero = 10;
  4.  
  5. {
  6. local $numero = 2;
  7.  
  8. say $numero;
  9. }
  10.  
  11. say $numero;

Esto de dará error:

Código
  1. use feature 'say';
  2.  
  3. my $numero = 10; # por el my
  4.  
  5. {
  6. local $numero = 2;
  7.  
  8. say $numero;
  9. }
  10.  
  11. say $numero;

En teoria todas las variables deberían estar declaradas con my pero bueno, en este caso es así y no se puede de otra manera.

De  todas formas perldoc ya aconseja que quizas local no nos de los resultados que esperamos y que es mejor usar variables globales porque son mas rapidas y accesibles.

http://perldoc.perl.org/functions/local.html


Cualquier duda, ¡pregunta!.


« Última modificación: 11 Febrero 2014, 12:36 pm por mDrinky » En línea

Un byte a la izquierda.
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: duda de novato con perl
« Respuesta #2 en: 11 Febrero 2014, 15:15 pm »

Hola de nuevo, gracias por la respuesta, pero me surgen nuevas dudas:

1 - ¿Entonces debería evitar el "use strict"? Por lo que he leído, strict se usa "strict" para escribir código "seguro", ¿es correcto? ¿no tiene otra utilidad? ¿A partir de 5.11 es completamente obligatorio?

2 - Si uso "use strict", ¿TODAS las variables que declare deberían ser "my"?

3 - ¿Variable global es aquella que no es ni "my" ni "local"? ¿Se pueden declarar variables globales si usas "strict"?

4 - Usando "strict": Supongamos que estoy dentro de un bloque (if, while, {}, lo que sea), ¿cómo puedo declarar una variable ahí dentro que "sobreviva" al salir de dicho bloque?

5 - Si vas a declarar 5 variables "my" por ej. ¿Hay alguna manera de hacerlo sin escribir 5 veces "my"?

6 - He leído que en perl el paso de parámetros es por referencia, por eso mucho cuidad al modificar valores de variables dentro de métodos. Mi pregunta es, si todo es por referencia, ¿cómo se saca partido a los punteros en perl?

7 - ¿Hay alguna manera de dar alias a los parámetros de las funciones? En caso negativo, ¿como es correcto manejar funciones con muchos parámetros (más de 5 por ej.) ?

Gracias.
« Última modificación: 11 Febrero 2014, 16:13 pm por SARGE553413 » En línea

fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: duda de novato con perl
« Respuesta #3 en: 11 Febrero 2014, 15:42 pm »

1- strict te obliga a declarar las variables y es bueno su uso, lo que no te recomiendo yo es usar variables declaradas con local.

2- Sí.

3- Con my declaras variables, pueden ser locales (si las declaras dentro de una funcion), o globales, si las declaras fuera, ej de variable local con my:

Código
  1. use feature 'say';
  2.  
  3. my $numero = 10;
  4.  
  5. fun();
  6.  
  7. say $numero;
  8.  
  9.  
  10. sub fun
  11. {
  12.    my $numero = 2;
  13. }

4- Una variable dentro de esos bloques no se considera como privada.

5- my ($var1,$var2,$var3,$var4,$var5);
En línea

Un byte a la izquierda.
fary


Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: duda de novato con perl
« Respuesta #4 en: 13 Febrero 2014, 11:37 am »

No me había dado cuenta de que habías editado el mensaje...  :rolleyes:

6- En Perl no hacen falta punteros para nada...

7- Que yo sepa no se puede dar alias a los parámetros, yo lo que hago es hacer la declaración en C como comentario:

Código
  1. use feature 'say';
  2.  
  3. fun1("Pepe","Martinez");
  4.  
  5.  
  6. sub fun1 # void fun1(char * Nombre, char * Apellido)
  7. {
  8.    say "Mi Nombre es $_[0] y mi apelido $_[1]";
  9. }
En línea

Un byte a la izquierda.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda en PERL
Scripting
eLank0 4 4,643 Último mensaje 30 Agosto 2004, 10:02 am
por eLank0
Duda con Perl. ¿Como se quien lo usa?
Scripting
‭lipman 1 2,319 Último mensaje 4 Junio 2007, 17:26 pm
por yeikos
Duda con un ejemplo simple en Perl
Scripting
skan 3 3,062 Último mensaje 19 Mayo 2010, 13:08 pm
por skan
[Duda]Sockets en perl.
Scripting
volteo0101 5 4,262 Último mensaje 14 Enero 2011, 05:07 am
por volteo0101
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines