perl\@转义序列

Set*_*nig 8 perl escaping

我有一个perl脚本,其中包含以下内容:

" \"blah\@$string;blah\" "
Run Code Online (Sandbox Code Playgroud)

但我不确定这\@是做什么/应该做什么的.

我试过谷歌搜索' \@'但我似乎找不到任何东西.

Que*_*tin 20

它导致@"An at sign"而不是"Dereference $stringas a arrayref".


tan*_*ent 6

@告诉Perl按字面意思对待它之前的反斜杠,否则它将把它当作一个数组.如果@后跟一个$,它将被视为数组引用(一个包含对数组的引用的字符串).如果你把它打印出来可能会更清楚(我已经更改了你的代码qq||):

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

print qq| "blah\@$string;blah" |; # with backslash
#  "blah@i-am-a-string;blah"

print qq| "blah@$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
#  "blah@ARRAY(0x803bc0);blah"    # ARRAY(0x803bc0) is where (1,2,3) lives

print qq| "blah@$string;blah" |; # no backslash
# "blah1 2 3;blah"
Run Code Online (Sandbox Code Playgroud)