Lun Abr 24, 2006 9:48 am
|
 |
dacons
Perlero Nuevo

|
Registrado: 27 Feb 2006
Mensajes: 48
|
|
| Ámbito de variables |
|
|
Hola de nuevo. He hecho una prueba con las variables y no entiendo lo que pasa. Primero con la función localtime();
| Código: |
$a=localtime();
print $a;
($b)=localtime();
print $b: |
$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?
| Código: |
@vec=(7,8,9)
$c=@vec
print $c
($d)=@vec
print $d
|
$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? |
|
|
|

Lun Abr 24, 2006 10:38 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
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.baboonsoftware.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 |
|

Lun Abr 24, 2006 10:39 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
|
|
|
|
|
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':
| Código: |
$ahora = localtime;
print $ahora; # Mon Apr 24 18:24:37 2006 |
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:
| Código: |
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
$mon++;
$year += 1_900;
print "$mday/$mon/$year $hour:$min:$sec"; # 24/4/2006 18:27:24 |
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:
| Código: |
explorer@next3:~> perl -le '($b) = localtime; print $b'
48
explorer@next3:~> perl -le '($b) = localtime; print $b'
49
explorer@next3:~> perl -le '($b) = localtime; print $b'
51
explorer@next3:~> perl -le '($b) = localtime; print $b'
52 |
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.
Ultima edición por explorer el Lun Abr 24, 2006 11:30 am, editado 1 vez |
|

Lun Abr 24, 2006 11:22 am
|
 |
dacons
Perlero Nuevo

|
Registrado: 27 Feb 2006
Mensajes: 48
|
|
|
|
|
Esto si que es ayuda clara y rápida.
Muchísimas gracias. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|