perl - 为什么perl区分`"`和`'?

根据这个注释:

你不应该使用单引号 print">>${ '_<$filename' }<<n" 相反,尝试: print">>${"_<$filename" }<<n"

我一直认为"'之间的区别只是字符串被解释或不被解释。

我想问一下为什么要这么做:


print">>${"_<$filename" }<<n"


print">>${ '_<$filename' }<<n"



perl打印不同的值?

为什么我应该使用"而不是'?

时间:

答案很简单: 字符串中找到的代码中的$@字符没有特殊意义。

">>${"_<$filename" }<<n" 就相当于 ">>" . ${"_<$filename" } ."<<n"

">>${ '_<$filename'" }<<n" 就相当于 ">>" . ${ '_<$filename' } ."<<n"

可以看到$filename没有像通常在双引号字符串中那样被$filename的值所取代。

如果不清楚的话,让我们考虑一个更常见的例子。

">>$h{$key}<<"等价于 ">>" . $h{$key} ."<<"

">>$h{"$key"}<<"等价于 ">>" . $h{"$key"} ."<<"

">>$h{'$key'}<<"等价于 ">>" . $h{'$key'} ."<<"

现在考虑一下如果$key被插进去会发生什么情况,(例如,使用$key ="2+3"; )行为会更加意外,更危险。

同样,字符在字符串中的代码中没有特殊意义时,除非它转义分隔符。

"foo ${f()} bar"等价于 "foo" . ${f()} ." bar"

...