• Publicidad

Problema al generar código

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema al generar código

Notapor BigBear » 2012-07-29 16:42 @737

Tengo el siguiente código el cual quiero evitar usar ' y " porque los uso en el código, me refiero a la variable $test que es el código a generar.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $test = qq(
  2. my $probar = "'test'";
  3. print $probar;
  4. );
  5. print $test;
  6.  
  7. open(O,">>mother.pl");
  8. print O $test;
  9. close O;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Y me devuelve este código mal hecho.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
my  = "'test'";
print ;
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿ Qué alternativas tengo ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Problema al generar código

Notapor explorer » 2012-07-29 18:46 @824

Usar el operador q() en lugar del qq().

Más información en perlop, sección Operadores de entrecomillado.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema al generar código

Notapor reLlene » 2012-07-29 19:07 @838

¿Qué es lo que quieres imprimir dentro del archivo mother.pl? Porque a ligeras, no se entiende lo que deseas hacer, sé más explicito...

Ahora, no es necesario "evitar" los quotes ' y ", me refiero el operador qq// funciona de modo que no exista ambigüedad ni tampoco necesidad de escapar ninguna comilla. Por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3.  
  4. my $test = qq/
  5. my $probar = \"'test'\";
  6. print $probar;
  7. /;
  8. print $test;
  9.  
  10. open(O,">>mother.pl");
  11. print O $test;
  12. close O;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Fíjate que estoy escapando las comillas dobles, y delimitándolo con el carácter "\". Sin embargo se obtiene el mismo resultado que el tuyo.

P.D.: ¡¡epa!! Parece que el syntax de Perl del foro (el coloreado) no lo hace bien, pero fíjate de correr ese código en la terminal que te lleva al mismo resultado.
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Re: Problema al generar código

Notapor explorer » 2012-07-29 20:02 @877

No es necesario escapar las comillas dentro de los operadores q() o qq(). Y los delimitadores, tampoco influyen.

El problema de Doddy es que ha usado el operador qq() con un texto que contiene dentro una variable escalar ($probar), por lo que al asignarlo a $test, Perl interpola el valor actual de esa variable, que al no ser ninguno, se transforma en una cadena vacía (el operador qq() hace las mismas funciones que las comillas dobles).

En cambio, con el operador q(), no hay interpolación (el operador tiene la misma función que las comillas simples), así que el texto que se almacena en $test es el mismo que se escribió, literal.

Más información en perlop, en el enlace indicado antes.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema al generar código

Notapor reLlene » 2012-07-29 20:34 @898

Perdón, ¡explorer tiene razón! ¡¡Confundí al delimitarlo!! No hay necesidad, pero sí de escaparlo cuando se delimita con las mismas comillas dobles, por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. "mensaje de \"error\"\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo que debes hacer, Doddy, es lo que dice el compañero más arriba y la var $probar definirla afuera.
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Re: Problema al generar código

Notapor explorer » 2012-07-29 21:21 @931

reLlene escribiste:Lo que debes hacer, Doddy, es lo que dice el compañero más arriba y la var $probar definirla afuera.
Yo no he dicho nada parecido... Lo que le he dicho es que use el operador q() y lo tendrá resuelto. :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados