- 论坛徽章:
- 1
|
这个其实在 perldoc -f split 里已经说得很清楚了。
- If the PATTERN contains parentheses, additional list elements
- are created from each matching substring in the delimiter.
复制代码
如果 PATTERN 包含有圆括号,那么就会创建额外的列表元素,这些列表元素就是分隔符中,圆括号捕捉到的值。
如果没有圆括号,那么 split /-|,/, "1-10,20" 返回的是 1 10 20,如果有了圆括号,那么返回的就是 1 $1 $2 10 $1 $2 20 了,而 $1 $2 在两次匹配中分别等于 - undef 和 undef , 。
何伟平翻译的《Perl 语言编程》也说了:
- 我们早先说过分隔符不会被返回,但是如果 PATTERN 包含圆括弧,那么每一对圆括弧匹配的子字串都会包括在结果列表中,分散在那些平常返回的域之中。下面是一个简单的例子:
- split /([-,])/, "1-10,20";
- 生成列表:
- (1, '-', 10, ',', 20)
- 如果有更多圆括弧,那么为每个圆括弧对返回一个域,即使有些圆括弧对没有匹配也如此,这种情况下,为那些位置返回未定义数值。因此,如果你说:
- split /(-)|(,)/, "1-10,20";
- 那么结果是:
- (1, '-', undef, 10, undef, 20);
复制代码 |
|