Dom Ago 28, 2005 8:45 am
|
 |
Lor
Perlero Nuevo

|
Registrado: 28 Abr 2005
Mensajes: 99
Ubicación: Argentina, Santa FE
|
|
| Nombres de variables dinamicos |
|
|
Ante todo Muchas gracias, al que pueda ayudarme con esto
Desde un form mando a un PL un conjunto de parametros con mombre del tipo
$nombreVariable$i con $i=0...........n
Es decir el pl recibe un nro de parametros que varia segun el caso:
$nombreVariable1, $nombreVariable2............$nombreVariablen
Mi problema es como asigno el parametro recibido ( $q->param('nombreVariable'.$i) a cada una de las variables que tomaran los valores de los parametros recibidos.
POR EJEMPLO:
my $i=1;
while ( $i <= $numero_parametros_recibidos)
{
my $parametro$i = $q->param('nombreVariable' . $i ) ;
$i++
}
LO QUE NECESITO SABER ES COMO COLOCO LA SETENCIA DE ASIGNACION PARA LOGRAR EN EL CASO DE $i= 5 POR EJEMPLO
$parametro5 = $q->param('nombreVariable5);
Espero me comprendan . Muchisimas gracias.  |
|
|
|

Dom Ago 28, 2005 12:47 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
|
|
|
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: |
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: |
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, |
|

Dom Ago 28, 2005 1:32 pm
|
 |
explorer39
Perlero Frecuente

|
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
|
|
| Ejemplo de variables ref |
|
|
| Código: |
#!/usr/bin/perl
use diagnostics;
use strict;
no strict 'refs';
our $parametro1;
our $parametro2;
our $parametro3;
our $parametro4;
our $parametro5;
our $parametro6;
# Parametros enviados por el usuario
my @params = qw(Hola amigos de toda la vida);
my $i = @params;
for( my $j = 1; $j <= $i; $j++ )
{
# Asignamos los valores
${"parametro$j"} = $params[$j-1];
# Los pintamos como prueba
print ${"parametro$j"}," ";
}
# Ejemplo de uso
print "\nPues ", $parametro1, "!\n";
|
|
|

Dom Ago 28, 2005 4:01 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
| Re: Ejemplo de variables ref |
|
|
| explorer39 escribió: |
| Código: |
#!/usr/bin/perl
use diagnostics;
use strict;
no strict 'refs';
our $parametro1;
our $parametro2;
our $parametro3;
our $parametro4;
our $parametro5;
our $parametro6;
# Parametros enviados por el usuario
my @params = qw(Hola amigos de toda la vida);
my $i = @params;
for( my $j = 1; $j <= $i; $j++ )
{
# Asignamos los valores
${"parametro$j"} = $params[$j-1];
# Los pintamos como prueba
print ${"parametro$j"}," ";
}
# Ejemplo de uso
print "\nPues ", $parametro1, "!\n";
|
|
No deberías hacer esa recomendación, es un PÉSIMO estilo de programación, y algo que no se debe hacer, mucho menos apagar strict 'refs' para todo el código.
Saludos, |
|

Dom Ago 28, 2005 4:47 pm
|
 |
explorer39
Perlero Frecuente

|
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
|
|
| Re: Ejemplo de variables ref |
|
|
| Perl user escribió: | No deberías hacer esa recomendación, es un PÉSIMO estilo de programación, y algo que no se debe hacer, mucho menos apagar strict 'refs' para todo el código.
Saludos, |
En el asunto del mensaje pone EJEMPLO, no RECOMENDACIÓN.
Y si apago strict fuera es por no hacer el ejemplo demasiado largo... tampoco hay que ser tan exigente con un ejemplo, por favor...  |
|

Dom Ago 28, 2005 4:50 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
| Re: Ejemplo de variables ref |
|
|
| explorer39 escribió: | | Perl user escribió: | No deberías hacer esa recomendación, es un PÉSIMO estilo de programación, y algo que no se debe hacer, mucho menos apagar strict 'refs' para todo el código.
Saludos, |
En el asunto del mensaje pone EJEMPLO, no RECOMENDACIÓN.
Y si apago strict fuera es por no hacer el ejemplo demasiado largo... tampoco hay que ser tan exigente con un ejemplo, por favor...  |
hehe ok
Pero es curioso mira, hace tiempo tuve una misma conversación ( o al menos similar ) con eiial, sobre ejemplos dados en el foro. Es sencillo dar ejemplos, y jamás he criticado en general que la gente de ejemplos, hablo pues que generalmente la gente aprende viéndolos, y pues lamentablemente la mayoría aprende viendo MALOS ejemplos... y eso nos lleva a que un buen estilo y buenas prácticas jamás existan entre nuestros hábitos, al contrario, es bueno que al principiante se le exhorte a programar con buenos hábitos y buenas prácticas ( y al final hasta para nosotros mismos es genial ). Pero creeme, de ninguna manera dije que no pongas ejemplos, o que haya estado mal que lo hicieras  |
|

Dom Ago 28, 2005 5:15 pm
|
 |
explorer39
Perlero Frecuente

|
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
|
|
| Re: Ejemplo de variables ref |
|
|
| Perl user escribió: | hablo pues que generalmente la gente aprende viéndolos, y pues lamentablemente la mayoría aprende viendo MALOS ejemplos... y eso nos lleva a que un buen estilo y buenas prácticas jamás existan entre nuestros hábitos, al contrario, es bueno que al principiante se le exhorte a programar con buenos hábitos y buenas prácticas ( y al final hasta para nosotros mismos es genial  | A ver...
Yo distingo claramente cuando pongo un ejemplo en qué foro estoy (principiantes, intermedio, experto, etc.) asi que intento poner un ejemplo acorde al foro, porque supongo que un experto 'sabe' lo que se 'debe' hacer o no. Vamos, se 'supone'
Otra cosa... he repasado todo el código que tengo en mi lugar de trabajo y de 99 códigos en perl, en 2 utilizo el truco de las referencias simbólicas. Y mirando el código por ver si quedaría mejor con un hash... pues sí... aunque el número de llaves que tengo que poner pues es el mismo
De
| Código: |
| my $file = "$tmpdir/${zona}_" . ${"file_$f"} . '.*.img'; |
a
| Código: |
| my $file = "$tmpdir/${zona}_" . $var{"file_$f"} . '.*.img'; |
|
|

Dom Ago 28, 2005 5:28 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
|
|
|
Yo uso referencias simbólicas para generar entradas dinámicas en la tabla de símbolos en tiempo de ejecución, cuando necesito generar accesores y/o mutadores, establecer algún alias o modificar alguna variable de algún paquete diferente que no se sabe en tiempo de compilación. Pero para casos simples como el anterior creo que no lo he hecho en mucho tiempo, no recuerdo alguno en estos momentos.
Saludos, |
|
Powered by phpBB © 2001, 2005 phpBB Group
|