2016-09-07 38 views
4

我只是遇到的Perl我第奇“怪癖”,在很长一段时间。我似乎无法在网上找到它的任何文档,我不知道Perl在做什么。Perl字符串,一个字符串中的变量,后跟单引号和另一个字符做什么?

就让我们切入正题:

my $name = "Steve"; 
my $v = "$name's name is $name"; 

$ v的值会变成是“名字是史蒂夫”。我使用vim,第一个$名称变成奇怪的颜色(绿色,而不是普通的深青色)。所以我知道这是一个已知的功能,但我不明白发生了什么。

对于那些谁可能希望提出其他建议,我知道我能做到以下任一操作没有任何问题:

$v = $name . "'s name is $name"; 
$v = "${name}'s name is $name"; 

我只是很好奇,什么样的Perl在我给第一种情况在做什么,它的用途是什么。

+2

[为什么perl会将刻度转化为冒号?](http://stackoverflow.com/questions/17411126/why-does-perl-translate-a-tick-into-a-colon) – Oktalist

+2

这是比提及的“重复”更清晰的问题和答案。我宁愿让这个问题比另一个更容易引用。 – ikegami

+0

@ikegami关闭另一个,然后呢? – Oktalist

回答

6

引用perlmod

老包分隔符是单引号,但现在双冒号是 首选的分隔符,部分原因是因为它更具有可读性于人类, 部分是因为它更具可读性emacs宏。这也使得 C++程序员觉得像他们知道这是怎么回事 - 因为使用单引号作为分隔符,在那里进行的Ada 程序员觉得他们知道发生了什么事情反对 。因为 老式的语法仍然支持向后兼容性, 如果您尝试使用像"This is $owner's house"一个字符串,你会 访问$owner::s;也就是说,在包装owner, $ s变量这可能不是你的意思。使用大括号来消除歧义,如 在"This is ${owner}'s house"

您也可以使用"This is $owner\'s house"

相关问题