🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
3 messages
3 total messages Started by Olaf "El BLanco" Fri, 20 Jan 2006 20:56
Problema en un for de PERL
#1357
Author: Olaf "El BLanco"
Date: Fri, 20 Jan 2006 20:56
8 lines
1171 bytes
for ($a=0; $a<$max; print "\t$a", $a++) {}
// Imprime 1 2 3 4 5 ... max. Muy bien... 

Pero ahora quiero hacer esto otro:

for ($a=0; $a<$max; $a++, print "\t$a") {}

// Y me imprime 00 11 22 33 44... max-1max-1 ?  
Re: Problema en un for de PERL
#1359
Author: Reinoso G.
Date: Sat, 21 Jan 2006 01:22
27 lines
2258 bytes
 El otro d�a, Olaf "El BLanco" nos estuvo contando:
> for ($a=0; $a<$max; print "\t$a", $a++) {}
> // Imprime 1 2 3 4 5 ... max. Muy bien... 

Al contrario, ese tiene que imprimir 00 11 22...
precisamente porque f�jate lo que va detr�s de print, o sea su argumento. 
Dado que no est�s usando par�ntesis todo lo que va detr�s hasta el final 
de la sentencia es argumento de print. As� que imprime un tabulador (que 
se sustituye por ir entre comillas dobles) la variable a y justo despues 
la variable a otra vez y luego la post-incrementa.

Si pusieras print ("\t$a") valdr�a, aunque te soltar�a un warning del 
estilo "print est� siendo interpretada como funci�n en la linea XX". PAra 
eso lo mejor es dejarse de zarandajas y hacer un for como toda la vida, 
con las instrucciones entre las llaves.

>
> Pero ahora quiero hacer esto otro:
>
> for ($a=0; $a<$max; $a++, print "\t$a") {}
>
> // Y me imprime 00 11 22 33 44... max-1max-1 ?  

No, ah� llega a max, no a max-1 porque incrementas antes de imprimir. Y no 
imprime m�s que lo que hay detr�s de print. Has intercambiado los casos.

Saludos.
Re: Problema en un for de PERL
#1362
Author: David Serrano (Hue-Bond)
Date: Sat, 21 Jan 2006 15:55
36 lines
1905 bytes
Olaf "El BLanco", vie20060120@21:56:54(CET):
>
> for ($a=0; $a<$max; print "\t$a", $a++) {}
> // Imprime 1 2 3 4 5 ... max. Muy bien... 

Discrepo:

$ perl
my $max = 6;
for ($a=0; $a<$max; print "\t$a", $a++) {}
__END__
        00      11      22      33      44      55$ _


> for ($a=0; $a<$max; $a++, print "\t$a") {}
> // Y me imprime 00 11 22 33 44... max-1max-1 ?  

Hmm... ¿no te habrás equivocado al escribir? ;)

$ perl
my $max = 6;
for ($a=0; $a<$max; $a++, print "\t$a") {}
__END__
        1       2       3       4       5       6$ _

En cualquier caso no necesitas el bloque vacío:

$ perl
my $max = 6;
print "\t$_" for 0..$max-1;
__END__
        0       1       2       3       4       5$ _


-- 
 David Serrano
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads