En lenguajes compilados, las variables no tienen un nombre. El nombre que ve en el código es un identificador único asociado con algún desplazamiento numérico. En un identificador como message_2
, el '2'
solo sirve para que sea un identificador único. Cualquiera puede decir que puede hacer sus tres variables: message_125
, message_216
y message_343
. Mientras pueda decir qué debe poner en qué, funcionan tan bien como message_1
...
El "nombre" de la variable es solo para que los mantenga en línea mientras escribe el código.
Los idiomas dinámicos añaden capacidad al no purgar la (s) tabla (s) de símbolos. Pero una tabla de símbolos es simplemente una asociación de un nombre con un valor. Debido a que Perl le ofrece listas y hash de forma económica, no es necesario utilizar el método de programación/logística para realizar un seguimiento de las variables y permitir un acceso flexible en tiempo de ejecución.
probable es que si usted se ve nombrar listas @message1
, @message2
, ... -, donde los elementos se diferencian solamente por su orden de referencia, que estos nombres son tan buenos: $message[1]
, $message[2]
, ....
Además, dado que las tablas de símbolos generalmente se asignan de nombre a desplazamiento (en la pila o en el montón), realmente no es mucho más que un par clave-valor que se encuentra en hash. Así que los hashes funcionan igual de bien para buscar nombres más distintos.
$h{messages} = [];
$h{replies} = [];
quiero decir realmente si quisiera, podría almacenar todo lo que se pone en una variable léxica en un solo hash para el alcance, si no le importa la escritura: $h{variable_name}
para todo. Pero no obtendría el beneficio de la administración implícita del alcance de Perl, y en todos los idiomas, los programadores preferían la administración implícita del alcance.
Perl permite la manipulación simbólica, pero con los años los lenguajes dinámicos han encontrado una bendición mixta. Pero en Perl tienes ambas "perspectivas", para darles un nombre. Como puede determinar qué código en un lenguaje compilado es probable que funcione mejor que un lenguaje dinámico, se ha determinado que es más libre de errores utilizar una "perspectiva compilada" para más cosas: como puede ver con la disponibilidad de administración de compensación y compilación de búsqueda de comportamiento que se le entregó en Core Perl, no hay razón para meterse con la tabla de símbolos, si no es necesario.
Crear una matriz de forma dinámica, es tan simple como: []
. Asignarlo a un lugar en la memoria, cuando no sabemos cuántos queremos almacenar, es tan fácil como:
push @message, [];
y la creación de una lista de listas a la vez es tan fácil como:
@message = map { [] } 1..$num_lists;
para un valor especificado en $num_lists
.
Probabilidad para la respuesta súper corto : [perllol] (http: // perldoc.perl.org/perllol.html). Incluso Perl tiene LOLz. – Dummy00001