2010-01-08 22 views
5

Estoy empezando a aprender Perl. Miré el beginning perl page y comencé a trabajar.¿Cuál es la diferencia entre comillas simples y dobles en Perl?

Dice:

La diferencia entre comillas simples y comillas dobles es que las comillas simples significa que sus contenidos deben ser tomadas literalmente, mientras que las comillas dobles significan que sus contenidos deben ser interpretados

cuando ejecuto este programa:

#!/usr/local/bin/perl 
print "This string \n shows up on two lines."; 
print 'This string \n shows up on only one.'; 

Genera:

 
This string 
shows up on two lines. 
This string 
shows up on only one. 

¿Me equivoco? la versión de Perl a continuación:

perl -v 

This is perl, v5.8.5 built for aix 

Copyright 1987-2004, Larry Wall 

Perl may be copied only under the terms of either the Artistic License or the 
GNU General Public License, which may be found in the Perl 5 source kit. 

Complete documentation for Perl, including FAQ lists, should be found on 
this system using `man perl' or `perldoc perl'. If you have access to the 
Internet, point your browser at http://www.perl.com/, the Perl Home Page. 
+1

Por favor, dar títulos más informativos a sus preguntas, en este caso "¿Cómo funciona la interpolación de cadenas en Perl con diferentes tipos de cotización?". Esto ayuda a las personas adecuadas a ver y responder a su pregunta. –

+3

"una duda en Perl": título horrible! Voy a editarlo en algo sensato. –

+6

No puedo replicar su problema. La segunda impresión aparece en una línea para mí, como espero que haga. Proporcione más información: ¿qué sistema operativo y versión de Perl está utilizando? Muestra el resultado de: perl -v – toolic

Respuesta

15

Me siento inclinado a decir que algo está pasando con su shell/terminal, y lo que sea que está produciendo es interpretar el \ n como una nueva línea y que el problema no está con Perl.

Para confirmar: esto no debería ocurrir (TM) - en el primer caso que se puede esperar para ver una nueva línea insertada, pero con comillas simples que debería de salida literalmente los caracteres \ n y no una nueva línea.

1

Por "interpretados", quieren decir que no se imprimirán los nombres de variables y tal, pero sus valores en su lugar. \ n es una secuencia de escape, así que creo que no sería interpretada.

4

En Perl, las cadenas de comillas simples no expanden las diapositivas-escapes como \n o \t. La razón por la que los ve expandidos probablemente se deba a la naturaleza del shell que está utilizando, que está afectando su producción por alguna razón.

+0

Tampoco hacen interpolación variable ("foo es $ bar") – amphetamachine

3

Todo lo que necesita saber sobre cotizaciones y operadores de cotización es en perlop.

Para responder a su pregunta específica, las comillas dobles pueden convertir ciertas secuencias de caracteres literales en otros caracteres. En su ejemplo, las comillas dobles convierten la secuencia de caracteres \ y n en el carácter único que representa una nueva línea. En una única cadena entre comillas, esa misma secuencia literal es solo los caracteres literales \ y n.

1

Además de su enlace O'Reilly, una referencia no menos autoritaria que el libro 'Programming Perl' de Larry Wall, afirma que la interpolación de barras invertidas no se produce en cadenas de una sola cita.

... much like Unix shell quotes: double quoted string literals are subject to 
backslash and variable interpolation; single quoted strings are not 
(except for \' and \\, so that you may ...) 

Programing Perl, 2nd ed, 1996 page 16 

lo tanto, sería interesante ver lo que su Perl hace con
de impresión 'barra invertida doble n: \\ n';

Como arriba, muéstranos el resultado de 'perl -v'.

Y creo que he confundido el software del editor de foros, porque la última 'impresión' de Perl debería haber sangrado.

+0

si escribo como imprimir '\\ n'; esto produce '\ n' – Vijay

1

Si utiliza la comilla doble, se interpretará como \ n como una nueva línea.

Pero si utiliza la comilla simple, no interpretará la \ n como una nueva línea.

Para mí está funcionando correctamente.

el contenido del archivo

print "This string \n shows up on two lines."; 
print 'This string \n shows up on only one.' 
Cuestiones relacionadas