Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

string -> variable

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Jue Jun 19, 2008 9:20 am
xagutxu_perez
Perlero Nuevo
Perlero Nuevo
Registrado: 04 Abr 2008
Mensajes: 43
string -> variable Responder citando

Hola a todos:

¿Es posible convertir el contenido de un string en el nombre de una variable? Me refiero a que si tengo, por ejemplo: $cadena = "puntero", ¿hay alguna forma de utilizar "puntero" como variable? No sé si me explico, sería algo así como (perdón por la tosquedad): $($cadena).

Gracias,

Xagutxu
Mensaje Jue Jun 19, 2008 9:33 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1366
Ubicación: México
Responder citando

Hola:

Lo que quires hacer es una referencia simbólica, tambíen llamadas soft-references:

Perl:
$var;

$nombre = 'var';

$$nombre = "Hola Mundo";

print $var; #imprime 'Hola Mundo'


Ahora, no es nada recomendable el uso de referencias simbólica, y de hecho el pragma strict te levanta error al querer usarlas. Si usas el pragma strict entonces deberás de deshabilitar ese warning:

Perl:
no strict 'refs';


Lo que te recomiendo que es te replantees el problema y búsques otra solución para evitar usar este tipo de referencias. ¿Quizá con un hash?

Saludos
Mensaje Jue Jun 19, 2008 9:46 am
xagutxu_perez
Perlero Nuevo
Perlero Nuevo
Registrado: 04 Abr 2008
Mensajes: 43
Responder citando

Hola, kidd:

El asunto es que leo $adar_atrib desde un fichero XML:

Perl:
        my $adar_atrib = $adarra->getAttribute("atrib");


Y ahora tengo que ver si lo que tengo yo guardado en la variable de nombre "$adar_atrib" es lo que busco o no. Tal y como tú me has dicho, he probado haciendo:

Perl:
        my $var = $$adar_atrib;
        print $var;


Pero me da un error, incluso sin el strict. El programa empieza a ejecutarse, pero cuando llega a esas líneas, me sale una especie de warning "Invalid expression" que finaliza el programa... ¿Hay algo que hago mal?

Xagutxu
Mensaje Jue Jun 19, 2008 10:20 am
xagutxu_perez
Perlero Nuevo
Perlero Nuevo
Registrado: 04 Abr 2008
Mensajes: 43
eso es... Responder citando

Sí, eso es, guarda el valor de un atributo, que es, a su vez, el nombre de una variable que guarda uno de los posibles valores de ese atributo. Con el valor de ese atributo entraría otra vez en el documento XML para buscar el nodo que contiene ese atributo con ese valor.

Cuando imprimo (para ver qué es lo que contiene cada variable):

Perl:
print "$adar_atrib";


Obtengo:

tokentype_11

que es una variable que tengo definida en el programa, que, haciendo:

Perl:
print "$tokentype_11";


Obtengo:

HAS_MAI

Pero cuando hago:

Perl:
print "$$adar_atrib";


No obtengo nada, me da una salida en blanco...
Mensaje Jue Jun 19, 2008 10:33 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4018
Ubicación: Valladolid, España
Responder citando

Perl:
#!/usr/bin/perl
$tokentype_11 = 'HAS_MAI';
$adar_atrib = 'tokentype_11';

print "$$adar_atrib";
print "\n";

Sale
Código:
HAS_MAI

Estoy con kidd... te va a resultar mucho mejor que dejes de usar este truco y uses hash.
Perl:
$adar_atrib{tokentype_11} = 'HAS_MAI';
Mensaje Jue Jun 19, 2008 10:52 am
xagutxu_perez
Perlero Nuevo
Perlero Nuevo
Registrado: 04 Abr 2008
Mensajes: 43
todo sobre ruedas Responder citando

Pues bien, así lo he hecho (con hashes), y todo sobre ruedas...

Cualquier día os mando un jamón...

Xagutxu
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group