• Publicidad

Funcionamiento de push en bucle while

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

Funcionamiento de push en bucle while

Notapor chukiemporio » 2010-01-31 04:15 @218

Hola,

Tengo el siguiente programa:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $i=0;
push (@numeros,$i) while ($i++ <= 10); #supongo que @numeros=();
$cadena=join(",",@numeros);
print "$cadena\n";
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Lo que me muestra en pantalla es : 1,2,3,4,5,6,7,8,9,10,11

Y no entiendo por qué no muestra : 0,1,2,3,4,5,6,7,8,9,10
que a mi parecer es lo que debería hacer, puesto que my $i=0.

¿A qué es debido?

¡Muchas gracias!
chukiemporio
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2010-01-11 02:57 @164

Publicidad

Re: Funcionamiento de push en bucle while

Notapor erv-Z » 2010-01-31 09:14 @426

Bueno, porque comienza a contar desde 0 hasta 10, o sea 0 es el punto de partida y comienza a incrementar a partir de ahí...

En la pantalla te muestra 1,2,3,4,5,6,7,8,9,10,11 por la condición que le pusiste al while().

Con esto bastaría:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $i=0;
push (@numeros,$i) while ($i++ < 10); #supongo que @numeros=();
$cadena=join(",",@numeros);
print "$cadena\n";
__END__
1,2,3,4,5,6,7,8,9,10
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Saludos.
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: Funcionamiento de push en bucle while

Notapor chukiemporio » 2010-01-31 10:40 @486

¡Muchas gracias ! ;)
chukiemporio
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2010-01-11 02:57 @164

Re: Funcionamiento de push en bucle while

Notapor explorer » 2010-01-31 10:57 @497

Pues no, erv-Z, no es debido a que la condición diga que debe guardar los valores mayores que 0.

Analizando la línea:
push @numeros, $i while $i++ <= 10;

Primero, Perl prueba la condición.
Como $i vale 0, la condición es cierta ($i es menor o igual que 10).
A continuación, Perl incrementa $i, por el efecto del post-incremento.
Y luego, con push, guarda el valor de $i.

De resultas de eso, nunca se guarda el primer valor de $i, ya que es incrementado antes de ser almacenado.

Si chukiemporio desea guardar ese valor, lo que tiene que hacer es incrementar $i en otro sitio:
push @numeros, $i++ while $i <= 10;

O hacer trampas e inicializar $i con un valor menor:
my $i = -1;
push @numeros, $i while $i++ <= 10;


Y del valor final, pues eso sí que depende de la condición de parada.
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


Volver a Básico

¿Quién está conectado?

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