2012-02-05 2 views
7

У меня есть скрипт на языке Perl с чем-то вроде следующего:Perl @ управляющей последовательности

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

Но я не уверен, что \@ делает/должен делать.

Я пробовал googling '\@', но я ничего не могу найти.

+0

Не совсем ответ, но я бы лично написать эту строку как 'QQ [" л \ @ $ строки; blah "], чтобы избежать необходимости избегать двойных кавычек в начале. В Perl qq [] совпадает с «", и вы можете выбрать разделители, которые вы предпочитаете: qq [], qq(), qq {}, qq //, qq ^^, qq !!, qq || и т. Д. , – zostay

ответ

19

Это приводит к тому, что @ означает «An at sign» вместо «Dereference $string как arrayref».

6

Обратная обратная косая черта перед @ говорит Perl, чтобы рассматривать ее буквально, иначе она будет рассматривать ее как массив. Если за @ следует $, он будет рассматриваться как ссылка на массив (строка, содержащая ссылку на массив). Если распечатать это может быть понятнее (я изменил код, чтобы использовать 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" 
Смежные вопросы