• Publicidad

Curiosidad básica sobre la asignación de variables escalares

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

Curiosidad básica sobre la asignación de variables escalares

Notapor Falkom » 2012-03-10 06:36 @317

Hola,

Esto es una duda muy básica y seguramente será algo sutil que se me ha pasado leyendo los manuales.
¿Qué diferencia hay entre my ($var) = 0; y my $var = 0?

Un abrazo y muchas gracias.

Falkom
Falkom
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2012-03-09 04:30 @229

Publicidad

Re: Curiosidad básica sobre la asignación de variables escal

Notapor explorer » 2012-03-10 08:11 @382

En principio, y según el ejemplo, no hay diferencia aparente: $var es declarada y definida con un valor 0. Eso es porque solo tienes un valor y una variable.

Ahora bien, los paréntesis sí que marcan una pequeña-gran diferencia: indican que queremos ejecutar la sentencia en un contexto de lista de elementos. Es decir, que queremos declarar (y, opcionalmente, definir) una lista de variables locales:

my($x, $y, $z) = (3, 4, 2);

my es solo un modificador que declara variables. La presencia de los paréntesis implica un cambio de contexto:

Con los paréntesis o con un array:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.            my ($foo) = <STDIN>;                # ¿MAL ESCRITO?
  2.            my @FOO = <STDIN>;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
estas dos sentencias suplen un contexto de lista a la parte derecha de la asignación, mientras que
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.            my $foo = <STDIN>;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
suple un contexto de escalar.

La diferencia entre los dos contextos se puede ver con un ejemplo de asignación descompensada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use v5.10;
  2. my ($x) = (3, 4, 2, 1);  # asignación en contexto lista
  3. say $x;                  # 3 : solo nos quedamos con el primero
  4. (my $x) = (3, 4, 2, 1);  # lo mismo
  5. say $x;                  # 3
  6. my $x   = (3, 4, 2, 1);  # asignación en contexto escalar
  7. say $x;                  # 1 : solo nos quedamos con el último
  8. my @x   = (3, 4, 2, 1);  # declaramos y definimos un array
  9. my $x   = @x;            # asignación en contexto escalar
  10. say $x;                  # 4 : nos quedamos con el número de elementos del array
  11. my($x)  = @x;            # asignación en contexto lista
  12. say $x;                  # 3 : nos quedamos con el primero
  13.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Como ves, los paréntesis sí que marcan una diferencia, pero solo cuando en la parte derecha tenemos una lista o un array.

Más información en la sección Private Variables via my() de perlsub (aún no traducido).
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: Curiosidad básica sobre la asignación de variables escal

Notapor Falkom » 2012-03-10 09:07 @421

Muchísimas gracias por tu gran respuesta.

Un abrazo.

Falkom
Falkom
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2012-03-09 04:30 @229


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 25 invitados

cron