2012-02-05 12 views
7

Tengo un script Perl con algo como lo siguiente:Perl @ secuencia de escape

" \"blah\@$string;blah\" " 

pero no estoy seguro de lo que está haciendo el \@/supone que debe hacer.

He intentado googlear '\@' pero parece que no encuentro nada.

+0

No es realmente una respuesta, pero yo personalmente iba a escribir esa cadena como 'qq [" bla \ @ $ cadena; blah "]' para evitar la necesidad de escapar de las comillas dobles al principio. En Perl, qq [] es lo mismo que "" y puede elegir los delimitadores que prefiera: qq [], qq(), qq {}, qq //, qq ^^, qq !!, qq ||, etc. . – zostay

Respuesta

19

Hace que @ signifique "An at sign" en lugar de "Dereference $string como arrayref".

6

La barra diagonal anterior al @ le dice a Perl que la trate literalmente, de lo contrario la tratará como una matriz. Si el @ es seguido por un $, se tratará como una referencia de matriz (una cadena que contiene una referencia a una matriz). Si imprime hacia fuera puede ser más claro (He cambiado el código para utilizar qq||):

my $string = 'i-am-a-string'; 

print qq| "blah\@$string;blah" |; # with backslash 
# "[email protected];blah" 

print qq| "[email protected]$string;blah" |; # no backslash 
# Can't use string ("i-am-a-string") as an ARRAY ref 

$string = [1,2,3]; # string now an array reference 

print qq| "blah\@$string;blah" |; # with backslash 
# "[email protected](0x803bc0);blah" # ARRAY(0x803bc0) is where (1,2,3) lives 

print qq| "[email protected]$string;blah" |; # no backslash 
# "blah1 2 3;blah" 
Cuestiones relacionadas