length index functions perl string

index - ¿Cuál es la diferencia entre comillas simples y dobles en Perl?



substr perl (6)

"" Soporta la interpolación de variables y el escape. así dentro "/(" / escapa (

Donde como '''' tampoco soporta. Así que ''/('' es literalmente /(

En Perl, ¿cuál es la diferencia entre '' y " ?

Por ejemplo, tengo 2 variables como a continuación:

$var1 = ''/(''; $var2 = "/("; $res1 = ($matchStr =~ m/$var1/); $res2 = ($matchStr =~ m/$var2/);

La declaración $res2 queja de que no Unmatched ( before HERE mark in regex m .


''no resolverá variables y escapes

"resolverá las variables, y los personajes de escape.

Si desea almacenar su carácter / en la cadena en $ var2, use "// ("


Las comillas dobles se interpretan, y las comillas simples no


Las comillas dobles utilizan expansión variable. Comillas simples no

En una cadena entre comillas dobles, debe 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";

Esto dará salida

Hello $var1

Perl Monks tiene una muy buena explicación de esto here


Perl toma las cadenas de comillas simples "tal cual" e interpola las cadenas de comillas dobles. Interpolar significa que sustituye variables con valores variables y también comprende caracteres de escape. Entonces, su "/ (" se interpreta como ''('', y su expresión regular se convierte en m / (/, esta es la razón por la que Perl se queja).


Si va a crear cadenas de expresiones regulares, debería utilizar el operador qr // quote-like :

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

Crea una expresión regular compilada que es mucho más rápida que simplemente usando una variable que contiene una cadena. También devolverá una cadena si no se utiliza en un contexto de expresiones regulares, por lo que puede decir cosas como

print "$var1/n"; #prints (?-xism:/()