• Publicidad

Ámbito de variables

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

Ámbito de variables

Notapor dacons » 2006-04-24 10:48 @491

Hola de nuevo. He hecho una prueba con las variables y no entiendo lo que pasa. Primero con la función localtime():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $a=localtime();
  2. print $a;
  3.  
  4. ($b)=localtime();
  5. print $b;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

$a, he leído por ahí que devuelve el nº de segundos desde 1970, aunque aquí coge la fecha, pero $b cada vez devuelve una cosa distinta.

¿Y en este otro?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @vec=(7,8,9)
  2. $c=@vec  
  3. print $c
  4. ($d)=@vec
  5. print $d;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

$c recoge el nº de elementos del vector ¿pero qué recoge $d?, me da como resultado 7, el primer valor del vector.

¿Qué es lo que hace el ( ) a la variable?
dacons
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-02-27 04:15 @219

Publicidad

Notapor kidd » 2006-04-24 11:38 @526

Hola.

Al poner el () estás diciendo que quieres los datos de una manera de arreglo, es por ello que con un array te regresa el primer elemento.

Si quieres una vista profunda a las variables de Perl te recomiendo que leas el siguiente artículo:
http://perlenespanol.com/articulos/archivo/000152.html

Ahí podrás entender que es lo que está haciendo Perl con tus variables detrás de las cortinas.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2006-04-24 11:39 @527

La función localtime devuelve cosas distintas según esté en contexto lista o en contexto escalar.

Como podrás leer en la documentación, en modo escalar devuelve la fecha en modo 'texto':
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $ahora = localtime;
  2. print $ahora; # Mon Apr 24 18:24:37 2006
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

En modo lista devuelve todos los componentes de la fecha, en forma de array, desde los segundos hasta si estamos en la hora ganada al retrasar los relojes para ahorrar energía:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
  2. $mon++;
  3. $year += 1_900;
  4. print "$mday/$mon/$year $hour:$min:$sec"; # 24/4/2006 18:27:24
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Es justamente los paréntesis lo que definen que la función trabaje de una manera o de otra.

Cuando pones ($b)=localtime();, estás ejecutando la función en modo lista. Y como sólo hay una variable en el lado izquierdo ($b), guarda allí el primer valor de la lista. En este caso, los segundos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@next3:~> perl -le '($b) = localtime; print $b'
  2. 48
  3. explorer@next3:~> perl -le '($b) = localtime; print $b'
  4. 49
  5. explorer@next3:~> perl -le '($b) = localtime; print $b'
  6. 51
  7. explorer@next3:~> perl -le '($b) = localtime; print $b'
  8. 52
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Por eso sale un número distinto cada vez... son los segundos de este minuto de tu vida.

Aquí tienes más información sobre las listas.
Última edición por explorer el 2006-04-24 12:30 @563, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor dacons » 2006-04-24 12:22 @557

Esto sí que es ayuda clara y rápida.

Muchísimas gracias.
dacons
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-02-27 04:15 @219


Volver a Básico

¿Quién está conectado?

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