我一直在尝试执行以下代码; 然而@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"; }
在这种情况下,我想基于空格分割.请问您能告诉我这段代码有什么问题吗?
您错误地使用拆分.这将有效:
@ans = split(' ', $answer);
以及:
@ans = split(/ /, $answer);
请注意,split的第一个参数不是字符串,而是正则表达式.以下拆分表达的所有变体都给出相同的结果:
' '
,/ /
," "
,m/ /
,m' '
,qr/ /
,qr' '
,qr{ }
.
的使用/str/
为正则表达式是有点类似于在表达式匹配正则表达式的使用:
my ($x) = ($str =~ /(w+)/);
要么
my ($x) = ($str =~ m/(w+)/);
UPDATE:感谢@mpapec,有大约一个疑难杂症' '
VS / /
来自perldoc -f split
:
作为一种特殊情况,指定空格('')的PATTERN将在空白处分割,就像没有参数的"拆分"一样.因此,"split('')"可用于模拟awk的默认行为,而"split(/ /)"将为您提供与前导空格一样多的初始空字段(空字符串).
换句话说,split(' ', " x y ")
返回('x', 'y')
,但split(/ /, " x y ")
返回('', 'x', 'y')
.