• Publicidad

Comillas y barra inversa

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

Comillas y barra inversa

Notapor Peich69 » 2013-03-28 16:18 @720

Hola,
Estoy haciendo un ejercicio y no entiendo una cosa.

Se supone (o lo que yo entiendo, vamos) que la diferencia entre ' y " es que ' no opera lo que encuentra dentro del string.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use warnings;
  3. print '\tHola' , "\n";  # imprime \tHola
  4. print "\tHola" , "\n";  # imprime Hola con tabulación
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El ejercicio trata de escribir la frase:
"Hola", dijo Juan. "Has comido hoy"

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "\"Hola,\" dijo Juan. \"Has comido hoy\"" , "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Hasta aquí todo bien, pero probando combinaciones diferentes para escribir la frase con ' y con " he llegado a un punto que no entiendo. Esto
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print '\"Hola,\" dijo Juan. \"Has comido hoy\"' , "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Me da el resultado esperado porque escribe literalmente el string, \"Hola, \" dijo Juan. \"Has comido hoy\"
Pero esto
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print '\'Hola,\' dijo Juan. \'Has comido hoy\'' , "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Me da como resultado 'Hola,' dijo Juan. 'Has comido hoy'
¿Por qué en este caso, estando el string entrecomillado con ', que se supone que no opera en el interior del mismo, no me aparece la barra inversa?
Peich69
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2013-03-19 08:49 @409

Publicidad

Re: Comillas y barra inversa

Notapor explorer » 2013-03-28 16:53 @745

Las barras diagonales inversas siempre influyen en el carácter que les sigue, cuando están entrecomilladas dobles, pero cuando el entrecomillado es simple, las barras diagonales inversas solo influyen en los casos de que el siguiente carácter sea una comilla simple y otra barra diagonal.

Lo dice en perlop:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Operadores de entrecomillado
       q/CADENA/
       'CADENA'
           Una cadena de caracteres literal, con un simple entrecomillado.
           Una barra diagonal inversa representa una barra diagonal inversa a menos que esté seguida
           por el delimitador u otra barra diagonal inversa, en cuyo caso el delimitador o la barra
           diagonal inversa son interpolados.

               $foo = q!Yo dije, "Tú dijiste, 'Ella dijo.'"!;
               $bar = q('Así es.');
               $baz = '\n';                # una cadena de dos caracteres
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Es decir: en un entrecomillado simple, si aparece una barra diagonal inversa, siempre será una barra diagonal inversa, salvo cuando esté seguida del delimitar (comilla simple), o de otra barra diagonal inversa. En esos dos casos, se interpola el significado de la barra diagonal inversa.

En el siguiente ejemplo, he tenido que poner una doble barra diagonal inversa al final, para evitar que solo una de ellas "escapara" el significado de la última comilla simple:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $string = 'C:\ruta\al\estilo\msDOS\\';
  2.  
  3. print "[$string]\n";    # [C:\ruta\al\estilo\msDOS\]
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Cuando se trata de imprimir textos que contienen comillas, es bueno recordar que existen los operadores q() (equivale a las comillas simples) y qq() (que equivale a las dobles). Así, el texto "Hola", dijo Juan. "Has comido hoy" yo lo pondría como

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print  '"Hola", dijo Juan. "Has comido hoy"', "\n";  # entrecomillado simple: toda la cadena es constante
  2. print q("Hola", dijo Juan. "Has comido hoy"), "\n";  # lo mismo, usando q()
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Si te fijas, a tu ejemplo de

print '\"Hola,\" dijo Juan. \"Has comido hoy\"' , "\n";

Le sobran todas las barras diagonales invertidas :)
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: Comillas y barra inversa

Notapor Peich69 » 2013-03-28 19:33 @856

Ok, gracias
Peich69
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2013-03-19 08:49 @409


Volver a Básico

¿Quién está conectado?

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