我在正则表达式匹配的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
答案 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中的上下文含义。