我有一个关于Perl连接运算符和追加运算符的一般性问题。
首先,这是直接来自 Learning Perl (第29页)
的例子# append a space to $str
$str = $str . " ";
# same thing with assignment operator
$str .= " ";
我的问题:这些方法中的任何一种更多"正确"或者因速度或语法原因而优先考虑?
非常感谢任何信息。
-Nick
答案 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上的变量相同。
基本上:使用您喜欢的任何一种方式!