duda de novato con perl

Iniciado por SARGE553413, 11 Febrero 2014, 02:51 AM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

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.

fary

#1
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 (perl) [Seleccionar]
use feature 'say'; # Para imprimir con say (Mucho mejor en mi opinion y te hace el salto de linea solo.)

$numero = 10;

{
local $numero = 2;

say $numero;
}

say $numero;


Esto de dará error:

Código (perl) [Seleccionar]
use feature 'say';

my $numero = 10; # por el my

{
local $numero = 2;

say $numero;
}

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!.
Un byte a la izquierda.

SARGE553413

#2
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.

fary

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 (perl) [Seleccionar]
use feature 'say';

my $numero = 10;

fun();

say $numero;

exit;

sub fun
{
    my $numero = 2;
}


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

5- my ($var1,$var2,$var3,$var4,$var5);
Un byte a la izquierda.

fary

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 (perl) [Seleccionar]
use feature 'say';

fun1("Pepe","Martinez");

exit;

sub fun1 # void fun1(char * Nombre, char * Apellido)
{
    say "Mi Nombre es $_[0] y mi apelido $_[1]";
}
Un byte a la izquierda.