[Q] $_ $[ y ... ?

Ernesto Hernandez-Novich emhn at telcel.net.ve
Fri Jul 28 20:14:51 CDT 2000


On Fri, 28 Jul 2000, Tony Rodriguez wrote:
>Salu2
>
>En lo siguiente:
>
>$\="\n";
>foreach (@arreglo) {
>	print "$[  -> $_";
>}
>
>tenemos que se imprimiran tantas lineas como elementos tenga el array y en cada
>linea se imprimira 0 ( "cero" que es el primer indice del array ) y, seguido de
>->,  el elemento del array que corresponda.  Pues bien, la pregunta es:

Tienes un malentendido con el $[ porque no significa el primer índice _del_
arreglo sino de _todos_ los arreglos en el alcance. No está en modo alguno
ligado con ningún arreglo particular, es simplemente una forma de modificar la
semántica de los arreglos para que comiencen en 0, 1, 42 o cualquier número que
resulte conveniente al programador.

>Existe una variable especial en perl que me indique el indice del elemento del
>array que esta siendo accesado?

¿Cómo podrías determinar primero que un arreglo está siendo accesado y segundo
que hay un iterador aplicado a él? Con un contador. ¿Qué sentido tiene
implementar _permanentemente_ un contador en _todos_ los bucles que involucren
un arreglo, si en la _mayoría_ de los casos nadie lo va a usar? Ninguno,
porque pecharías la eficiencia notablemente a cambio de muy poca
conveniencia. ¿Cómo manejas el caso en el cuál se manipulan _varios_ arreglos en
una iteración?

foreach (@a, at b, at c, at d, at e) { ... }

¿Qué semántica tendría el contador? ¿Para la lista concatenada o para cada
lista? Y ante cualquiera de ambas respuestas, ¿por qué? (Por supuesto, se trata
de una pregunta en la cual ambas respuestas son correctas pero incorrectas en
la práctica de implementación del lenguaje). Finalmente, ¿y si la lista es
modificada durante el iterador para estirarse/encogerse/reordenarse, qué
semántica le vas a dar al contador implícito?

Son preguntas que no tienen respuesta trivial y que son dejadas como
preocupación para el que programa en Perl y no para el que programa a Perl :-).
La variable que buscas no existe implícita, tienes que expresarla
explícitamente como un contador.

En todo caso, sería interesante que nos comentaras un caso práctico en el cual
dicha variable (si existiese) resultaría _realmente_ útil.
-- 
Ernesto Hernández-Novich - Running Linux 2.2.16 i686 - Unix: Live free or die!
One thing is to be the best, and another is to be the most popular.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V
PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++
-----END GEEK CODE BLOCK-----
------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------



More information about the caracas-pm mailing list