2009-06-03 14 views

Respuesta

31

comillas dobles uso expansión de variables. las comillas simples no

en una La cadena de comillas dobles necesita escapar de ciertos caracteres para evitar que se interpreten de manera diferente. En una sola cadena entre comillas no lo hace (a excepción de una barra invertida si es el carácter final de la cadena)

my $var1 = 'Hello'; 

my $var2 = "$var1"; 
my $var3 = '$var1'; 

print $var2; 
print "\n"; 
print $var3; 
print "\n"; 

Esta es la salida

Hello 
$var1 

Perl monjes tiene una muy buena explicación de este here

+0

Quiere decir que en la cita singe '\\ (' consta de 1 carácter y en comillas dobles "\\ (" consta de 2 caracteres? – chappar

+6

No, es todo lo contrario. '\\ ('es 2 caracteres, y "\\ (" es uno. –

+1

El carácter delimitador también debe tener una barra inclinada invertida, y la barra invertida en varios casos además del carácter final de la cadena (por ejemplo, la cadena de dos caracteres \' es '\\\ '', no '\\' '). – ysth

3

comillas dobles interpretan, y comillas simples no

+0

La idea es correcta, pero no puede usar 42isanumber como nombre de variable. –

4

'no resolverá las variables y se escapa

"resolverá variables y caracteres de escape.

Si desea almacenar el carácter \ en la cadena en $ var2, use "\\ ("

+3

s/resolve/interpolate/ –

1

"" Admite la interpolación variable y el escape. por lo que el interior "\("\ escapa (

Donde como '' no admite tampoco. Así '\(' es literalmente \(

2

Perl toma las cadenas entre comillas simples 'tal cual' e interpola las cadenas entre comillas dobles. Interpolar medios, que sustituye las variables con valores variables, y también entiende los caracteres escapados. Por lo tanto, su "\" se interpreta como '(', y su expresión regular se convierte en m/(/, esta es la razón por la que Perl se queja.

+0

En cadenas de caracteres simples, reconoce dos caracteres que se han escapado: el carácter delimitador final y \. – ysth

2

Si usted va a crear cadenas de expresiones regulares que realmente debería utilizar el qr// quote-like operator:

my $matchStr = "("; 
my $var1 = qr/\(/; 
my $res1 = ($matchStr =~ m/$var1/); 

Crea una expresión regular compilada que es mucho más rápido que el simple uso de una variable que contiene una cadena. También devolverá una cadena si no se usa en un contexto regex, por lo que puede decir cosas como

print "$var1\n"; #prints (?-xism:\() 
+0

El OP puede leer las secciones perlop en los operadores de Quotelike: http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators – daotoad

+1

@daotoad ¿Te refieres al enlace en la respuesta? –

Cuestiones relacionadas