我在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");
Run Code Online (Sandbox Code Playgroud)
结果:
foofoofoofoofoofoofoo
7
Run Code Online (Sandbox Code Playgroud)
sim*_*que 13
因为您正在使用连接运算符.,它强制@foo进入标量上下文.数组在标量上下文中返回其元素数.
使用参数列表而不是与您的串联print来获取列表和换行符.@foo无论如何,数组将扩展到它包含的列表,因此换行符只是另一个参数print.
print @foo, "\n";
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您可以使用say,需要激活use feature 'say'.它不需要在打印时附加换行符.say可从Perl 5.10获得.
use feature 'say';
say @foo;
Run Code Online (Sandbox Code Playgroud)
你也可以打开它
use v5.10;
Run Code Online (Sandbox Code Playgroud)
这与正则表达式无关.这是Perl的核心行为,以及Perl中的列表如何工作.