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.
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.
Hace que @
signifique "An at sign" en lugar de "Dereference $string
como arrayref".
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"
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