Обратная косая черта перед @
указывает 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"