我一直在尝试执行以下代码;然而@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";
}
在这种情况下,我想基于空格分割。请问您能告诉我这段代码有什么问题吗?
答案 0 :(得分:6)
您错误地使用拆分。这将有效:
@ans = split(' ', $answer);
以及:
@ans = split(/ /, $answer);
请注意,split的第一个参数不是字符串,而是正则表达式。以下拆分表达式的所有变体都给出了相同的结果:
' '
,/ /
," "
,m/ /
,m' '
,qr/ /
,qr' '
,qr{ }
正则表达式/str/
的用法与表达式中匹配正则表达式的用法有些相似:
my ($x) = ($str =~ /(w+)/);
或
my ($x) = ($str =~ m/(w+)/);
更新:感谢@mpapec,来自' '
的{{1}}与/ /
有一个问题:
作为一种特殊情况,指定空格('')的PATTERN将在空白处分割,就像没有参数的“拆分”一样。因此,“split('')”可用于模拟awk的默认行为,而“split(/ /)”将为您提供与前导空格一样多的初始空字段(空字符串)。
换句话说,perldoc -f split
会返回split(' ', " x y ")
,但('x', 'y')
会返回split(/ /, " x y ")
。
答案 1 :(得分:0)
您还可以使用以下行来处理多个空格
@ans = split(/ +/,$answer);
希望这可以帮到你
由于
答案 2 :(得分:0)
mvp的回答是正确的。但我认为您可能无法理解封闭的//
含义。这意味着匹配封闭的//
中的字符串。因此,您不需要在程序中引用封闭内容,例如'/ /'
。文件在这里。
split document
答案 3 :(得分:0)
参考下面提到的代码,你必须只使用一个反斜杠来转义空白字符。如果你在旁边引号中指定了这个,则没有必要用空格用两个反斜杠括起来
my $answer = "6.9 4012 top 5.6 2868 top 5.0 3686 top 4.7 5128 top 4.5 3120 top";
my @ans = split(" ",$answer);
# my @ans = split("\ ",$answer);
# my @ans = split(' ',$answer);
# my @ans = split('\ ',$answer);
# my @ans = split(/ /,$answer);
foreach (@ans) {
print "$_\n";
}