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

标签 perl append operators concatenation

首先,这是直接来自学习 Perl(第 29 页)的示例

# Append a space to $str
$str  = $str . " ";

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

出于速度或语法原因,这些方法是否更“正确”或更优选?

最佳答案

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

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

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

$str .= " ";

主要是为了便于键入,并且因为很明显您要 append 到字符串末尾,而无需检查右侧的变量是否与左侧相同。

本质上:使用你喜欢的任何一个!

关于Perl 连接运算符与追加运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388175/

相关文章:

Perl LWP::Simple::getstore 如何检查目标目录中是否存在文件

perl - 在 perl 脚本中使用环境变量

javascript - 使用 jQuery 在数组中追加多个对象

c# - 在 C# 中,++i 和 i++ 之间有什么性能差异吗?

xml - 用于在 XML 中查找和替换标记值的 Perl 代码

linux - Archive::Zip 无法在 Perl 中创建 Zip 对象

java - 在Java中将数据追加到文件的正确方法

javascript - 使用 .append 和多行代码添加内容

batch-file - 批量不等于(不等)运算符

perl - 包含字母字符的字符串如何在数值上等同于 Perl 中的数字?