perl symbolic-references

¿Cómo puedo usar una variable como nombre de variable en Perl?



symbolic-references (2)

No puedes simplemente unir variables así y obtener una variable resultante. Usted PODRÍA evaluar la expresión de $msg + i , pero probablemente sea mejor si hace msg una matriz y solo indexa: $msg[$i] .

Necesito lograr lo siguiente en Perl

printmsg(@val1, $msg1) if @val1; printmsg(@val2, $msg2) if @val2; printmsg(@val3, $msg3) if @val3; printmsg(@val4, $msg4) if @val4; printmsg(@val5, $msg5) if @val5; printmsg(@val6, $msg6) if @val6;

Así que escribí el siguiente fragmento

for(my $i=1; $i < 6; $i++ ) { printmsg(@val$i, $msg$i) if @val$i; }

No funciona y se rompe con errores.


Siempre que te encuentres postfixing nombres de variables con un índice entero , date cuenta de que deberías haber utilizado una matriz en su lugar:

my @msgs = (''msg1'', ''msg2'', ..., ''msg6''); my @vals = ( [ @val1 ], [ @val2 ], ..., [ @val6 ] );

Consulte también las Preguntas frecuentes ¿Cómo puedo usar una variable como nombre de variable?

Como respuesta a las notas de las preguntas frecuentes, si las variables no están indexadas por un entero, puede usar una tabla hash:

Mediante el uso de referencias simbólicas, solo está utilizando el hash de tabla de símbolos del paquete (como %main:: lugar de un hash definido por el usuario. La solución es usar tu propio hash o una referencia real en su lugar.

$USER_VARS{"fred"} = 23; my $varname = "fred"; $USER_VARS{$varname}++; # not $$varname++

Debe leer toda la lista de preguntas frecuentes al menos una vez al año.

Actualización: A propósito dejé referencias simbólicas de mi respuesta porque son innecesarias y probablemente muy dañinas en el contexto de su pregunta. Para obtener más información, consulte ¿Por qué es estúpido ''usar una variable como nombre de variable''? , parte 2 y parte 3 por mjd .