为什么打印会在有换行和不换行时给出不同的输出?

时间:2017-03-13 10:18:27

标签: arrays perl

我在正则表达式匹配的print语句中得到两个不同的结果,包括和没有换行符。为什么呢?

$string16="abfoo bcfooo defooo ghfooo ijfoo klfooo mnfooo";
@foo=$string16=~ m/foo/g;
print(@foo);
print("\n");

$string17="abfoo bcfooo defooo ghfooo ijfoo klfooo mnfooo";
@foo=$string17=~ m/foo/g;
print(@foo."\n");

结果:

foofoofoofoofoofoofoo
7

1 个答案:

答案 0 :(得分:13)

因为您使用的是连接运算符.,它强制@foo进入标量上下文。数组在标量上下文中返回它们的元素数。

使用参数列表而不是与print的连接来获取列表和换行符。数组@foo无论如何都会扩展到它包含的列表,因此换行符只是print的另一个参数。

print @foo, "\n";

作为替代方案,您可以使用say,这需要使用use feature 'say'激活。它不需要在打印时附加换行符。 Perl 5.10提供了say

use feature 'say';
say @foo;

您也可以使用

打开它
use v5.10;

这与正则表达式无关。这是Perl的核心行为,以及Perl中的列表如何工作。

Here's a good explanation Perl中的上下文含义。

相关问题