该split
函数接受三个参数:
匹配分隔符或特殊值" "
(由单个空格组成的字符串)的正则表达式,它修剪字符串,然后在空格处拆分,如/\s+/
.
应拆分的字符串。
结果片段的最大数量。有时,当您对所有字段不感兴趣时,这是一种优化,有时您不想在每个分隔符处进行拆分,就像这里的情况一样。
因此,您的split
表达式最多会返回两个字段,但不一定正好是两个。要为您的变量提供默认值,请在 之前分配默认值split
,或者检查它们是否undef
在 之后split
,并给出默认值:
my ($foo, $bar) = ('', '');
($foo, $bar) = split ...;
或结合
(my ($foo, $bar) = ('', '')) = split ...
或者
my ($foo, $bar) = split ...;
$_ //= '' for $foo, $bar;
如果 LHS 是,//=
则操作员在 RHS 上分配值undef
。for
循环只是缩短代码的一种方式。
您可能还希望仅在恰好生成两个字段时才继续使用一段代码:
if ( 2 == (my ($foo, $bar) = split ...) ) {
say "foo = $foo";
say "bar = $bar";
} else {
warn "could not split!";
}
标量上下文中的列表分配计算为分配的元素数。