以下两个陈述之间的区别在哪里?
print "surname=" ,$myVal, "\n";
和
print "surname=" .$myVal. "\n"
我测试了它们并且都返回了相同的结果。是否有差异?
由于
答案 0 :(得分:8)
前者将打印以$,
分隔的列表中的每个项目。后者首先加入所有东西,所以没有任何东西要分开。除非$,
具有可打印的内容,否则这些陈述之间没有显着差异。
答案 1 :(得分:5)
print可以接受列表,这是您传递的列表。打印将对列表中的所有内容(即surname=
,$myVal
和\n
第二个例子必须首先连接所有内容,然后打印出来。
使用逗号不会连接,这也是两者之间的区别。
答案 2 :(得分:3)
Perl程序员可能会将其写为:
print "surname=$myVal\n";
它看起来确实在做同样的事情,不是吗?在你的例子中它确实做了同样的事情。如果用数组替换标量变量,差异就更明显了。
my @var = qw(some data);
print "value=", @var, "\n";
print "value=". @var. "\n";
不同之处在于传递给print函数的参数数量。如果使用连接运算符(。),则将参数连接在一起成为一个字符串,print将获得单个参数。如果使用逗号,则print会获取参数列表。
当然,可以在同一个打印调用中混合使用这些方法。
print "surname=" ,$myVal . "\n";
另一个很好的例子是使用localtime的返回值。
print 'The time is ', localtime, "\n";
print 'The time is '. localtime, "\n";
答案 3 :(得分:2)
正如人们之前所说,.
连接字符串和,
单独的数组元素。
.
形式需要考虑的一件事是由于内存管理导致某些特定情况下的性能问题:.
版本需要先在内存中创建新字符串并继续扩展已解决的内存(有人可能会在这部分详细说明吗?)。如果您使用数千个非常大的字符串连接在一个循环中打印100万次,那么.
版本会比,
版本的性能差。就像将整个文件啜饮到内存中而逐行处理一样。但是凡人都不会在现代电脑的日常生活中注意到这个问题。
答案 4 :(得分:1)
据我所知print
也可以列出一个列表,我认为这是第一段代码(逗号分隔)的情况。第二个(带有'。')只是字符串追加,换句话说,第一个调用发送三个参数进行打印,而第二个调用发送一个。
编辑:这是documentation page