拆分不起作用(Perl)

use*_*175 3 regex perl split

我一直在尝试执行以下代码; 然而@ans最终得到了$ answer的全部内容.

$answer = "6.9 4012 top 5.6 2868 top 5.0 3686 top 4.7 5128 top 4.5 3120 top";
@ans = split('/ /',$answer);
foreach (@ans) {
    print "$_\n";
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想基于空格分割.请问您能告诉我这段代码有什么问题吗?

mvp*_*mvp 6

您错误地使用拆分.这将有效:

@ans = split(' ', $answer);
Run Code Online (Sandbox Code Playgroud)

以及:

@ans = split(/ /, $answer);
Run Code Online (Sandbox Code Playgroud)

请注意,split的第一个参数不是字符串,而是正则表达式.以下拆分表达的所有变体都给出相同的结果:

' ',/ /," ",m/ /,m' ',qr/ /,qr' ',qr{ }.

的使用/str/为正则表达式是有点类似于在表达式匹配正则表达式的使用:

my ($x) = ($str =~ /(w+)/);
Run Code Online (Sandbox Code Playgroud)

要么

my ($x) = ($str =~ m/(w+)/);
Run Code Online (Sandbox Code Playgroud)

UPDATE:感谢@mpapec,有大约一个疑难杂症' 'VS / /来自perldoc -f split:

作为一种特殊情况,指定空格('')的PATTERN将在空白处分割,就像没有参数的"拆分"一样.因此,"split('')"可用于模拟awk的默认行为,而"split(/ /)"将为您提供与前导空格一样多的初始空字段(空字符串).

换句话说,split(' ', " x y ")返回('x', 'y'),但split(/ /, " x y ")返回('', 'x', 'y').