Que tal,
Mira es claro el hecho de que tu caso necesita 'symbolic references', pero no lo recomiendo, no cuando tienes la facilidad de manejar hashes y arreglos para ese sencillo problema.
De todos modos te dejo una solución usando symbolic references, y luego la que yo te recomiendo.
- Código: Seleccionar todo
use strict;
my $foo = 'bar';
my $bar = 'baz';
{
no strict 'refs';
$$foo = 'weee'; # cambiando el valor de $main::bar a 'weee'
}
print $main::bar; #imprime 'weee'
print $bar; #imprime 'baz'
Que significa esto? que todo movimiento a tus variables 'autogeneradas' tendrás que hacerlo dentro del bareblock del 'no strict refs', ya que si no lo haces, perl abortará y advertirá que no puedes usar una cadena para hacer referencias simbólicas hacia los nombres de variables ( lo cual es seguro y de muy buen estilo, por algo te lo dice el intérprete ).
Y como podrás observar $main::bar y $bar son variables diferentes, pero por qué? sencillo, las variables declaradas por my no pertenecen a ningún paquete, son creadas y alojadas en tiempo de compilación y por tanto, en tiempo de ejecución no puedes generarlas, caso contrario con variables de paquete o globales, las cuales puedes generar cuando quieras, pero únicamente usando su nombre completamente calificado ( es decir, especificando el paquete ), a menos que se use
our. Esto es, para cumplir tu acometido tendrás que generar variables globales.
Sin embargo, teniendo la facilidad de usar un hash, o simplemente un arreglo ya que tus posiciones son secuenciales, por qué no hacer:
- Código: Seleccionar todo
my %params;
for ( 1..10 ) {
$params{ 'parametro' . $_ } = $q->param( 'Parametro' . $_ );
}
print $params{parametro1};
Puedes consultar sobre referencias simbólicas en
perlref y el capítulo 8 de Programming Perl 3rd Edition.
Saludos,