Perl连接运算符与追加运算符

时间:2014-08-19 16:10:26

标签: perl append operators concatenation

我有一个关于Perl连接运算符和追加运算符的一般性问题。

首先,这是直接来自 Learning Perl (第29页)

的例子
# append a space to $str
$str  = $str . " ";

# same thing with assignment operator
$str .= " ";

我的问题:这些方法中的任何一种更多"正确"或者因速度或语法原因而优先考虑?

非常感谢任何信息。

-Nick

1 个答案:

答案 0 :(得分:4)

查看每个选项的简明输出:

perl -MO=Concise,-exec -e 'my $str = "a"; $str  = $str . " ";'
1  <0> enter 
2  <;> nextstate(main 1 -e:1) v:{
3  <$> const[PV "a"] s
4  <0> padsv[$str:1,2] sRM*/LVINTRO
5  <2> sassign vKS/2
6  <;> nextstate(main 2 -e:1) v:{
7  <0> padsv[$str:1,2] s
8  <$> const[PV " "] s
9  <2> concat[$str:1,2] sK/TARGMY,2
a  <@> leave[1 ref] vKP/REFC
-e syntax OK
perl -MO=Concise,-exec -e 'my $str = "a"; $str .= " ";'
1  <0> enter 
2  <;> nextstate(main 1 -e:1) v:{
3  <$> const[PV "a"] s
4  <0> padsv[$str:1,2] sRM*/LVINTRO
5  <2> sassign vKS/2
6  <;> nextstate(main 2 -e:1) v:{
7  <0> padsv[$str:1,2] sRM
8  <$> const[PV " "] s
9  <2> concat[t2] vKS/2
a  <@> leave[1 ref] vKP/REFC
-e syntax OK

虽然它们略有不同(.=在void上下文中连接,另一个在标量中)选择其中一个的主要原因是样式/可维护性。我更喜欢写:

$str .= " ";

主要是为了便于输入,因为很明显你要附加到字符串的末尾而不必检查RHS上的变量与LHS上的变量相同。

基本上:使用您喜欢的任何一种方式!