Есть несколько вещей, на которые следует обратить внимание при интерполяции, хотя, узнав о них, вы вряд ли когда-нибудь сделаете это по ошибке.
Помещение имени переменной рядом с допустимым текстом идентификатора. Perl находит самое длинное допустимое имя переменной и не заботится, определено ли оно ранее. Вы можете установить явную часть имени переменной с фигурными скобками:
my $p = 'p';
print "Mind your $ps and qs\n"; # $ps, not $p
print "Mind your ${p}s and qs"; # now its $p
Теперь, в этом примере, я забыл апостроф. Если я добавлю его, у меня возникнет еще одна проблема, поскольку апостроф раньше был разделителем пакетов со старых времен, и он все еще работает. Там тоже работают брекеты:
my $p = 'p';
print "Mind your $p's and q's\n"; # $p::s, not $p
print "Mind your ${p}'s and q's"; # now its $p
Perl также может интерполировать доступ к одному элементу к хэшам и массивам, поэтому размещение индексных символов рядом с именем переменной может привести к нежелательным последствиям:
print "The values are $string[$foo]\n"; That's the element at index $foo
print "The values are $string{$foo}\n"; That's the value for the key $foo
Если вам нужен адрес электронной почты в строке, вы можете забыть, что Perl интерполирует массивы. Perl делал это с фатальной ошибкой, если вы не избежали @
:
print "Send me mail at joe@example.com\n"; # interpolates @example
print "Send me mail at joe\@example.com\n";
Поскольку Perl использует обратную косую черту для экранирования некоторых символов, вам нужно удвоить их, если вы хотите буквальный:
print "C:\real\tools\for\new\work"; # not what you might expect
print "C:\\real\\tools\\for\\new\\work"; # kinda ugly, but that's life
print "C:/real/tools/for/new/work"; # Windows still understands this
Несмотря на эти незначительные ошибки, мне очень не хватает легкости, с которой я могу создавать строки в Perl, если мне нужно использовать другой язык.