当我想要对变量进行字符串化时:我是否将变量放在双引号中会有所不同
$string = "$v";
或者我是否将变量与空字符串连接起来
$string = '' . $v;
答案 0 :(得分:7)
当我想要对变量进行字符串化
时
所以从来没有?期望字符串的运算符将字符串化其操作数。人们需要明确地进行字符串化是非常罕见的。我想我曾经只做过一次。
是否将变量放在双引号
中会有所不同
代码生成的代码不同。
$ perl -MO=Concise,-exec -e'"$v"'
...
3 <#> gvsv[*v] s
4 <@> stringify[t2] vK/1
...
$ perl -MO=Concise,-exec -e'"".$v'
...
3 <$> const[PV ""] s
4 <#> gvsv[*v] s
5 <2> concat[t2] vK/2
...
这种差异对于具有重载运算符的对象很重要,这是您可能想要显式字符串化的少数几次之一。
$ perl -e'
use overload
q{""} => sub { print "stringified\n"; "" },
"." => sub { print "concatenated\n"; "" };
$v = bless({});
"$v";
"".$v;
'
stringified
concatenated
对于大多数课程来说,它仍然会变得相同。您应该只遇到.
并不意味着连接的类的问题。