插值有几件事情需要注意,尽管一旦你了解它们,你几乎不会误操作它们。
将变量名称放在有效标识符文本旁边。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 中构建字符串的便利性。