2012-02-05 11 views
7

io ho uno script perl con qualcosa come il seguente:perl @ sequenza di escape

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

ma non sono sicuro di quello che il \@ sta facendo/dovrebbe fare.

Ho provato su google "\@" ma non riesco a trovare nulla.

+0

Non proprio una risposta, ma io personalmente scrivere la stringa come 'qq [" blah \ @ $ string; bla "]" per evitare la necessità di sfuggire alle virgolette all'inizio. In Perl, qq [] è uguale a "" e puoi scegliere i delimitatori che preferisci: qq [], qq(), qq {}, qq //, qq ^^, qq !!, qq ||, etc . – zostay

risposta

19

Fa sì che @ significhi "An at sign" anziché "Dereference $string come arrayref".

6

Il backslash prima del @ indica a Perl di trattarlo letteralmente, altrimenti lo tratterà come un array. Se lo @ è seguito da uno $, verrà considerato come riferimento di matrice (una stringa che contiene un riferimento a un array). Se si stampa fuori può essere più chiaro (ho cambiato il codice per utilizzare 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" 
Problemi correlati