我是 Perl 的新手,我需要做一些正则表达式。我读到,当数组像整数值一样使用时,它会给出内部元素的计数。
所以我正在做例如
if (@result = $pattern =~ /(\d)\.(\d)/) {....}
我在想它应该在模式匹配失败时返回空数组,但它仍然给我一个包含 2 个元素的数组,但具有未初始化的值。
那么我如何将模式匹配放入 if 条件中,这可能吗?
编辑:
foreach (keys @ARGV) {
if (my @result = $ARGV[$_] =~ /^--(?:(help|br)|(?:(input|output|format)=(.+)))$/) {
if (defined $params{$result[0]}) {
print STDERR "Cmd option error\n";
}
$params{$result[0]} = (defined $result[1] ? $result[1] : 1);
}
else {
print STDERR "Cmd option error\n";
exit ERROR_CMD;
}
}
它是命令行选项的正则表达式模式,cmd 选项是长格式,前面有两个连字符,并且可能带有参数,所以 --CMD[=ARG]。我想要优雅的解决方案,所以这就是为什么我想把它放在没有一些序言等的 if 条件下。
EDIT2:哦,对不起,我在想@result 数组中的组总是从 0 开始计数,但只有来自分支的组才能访问,其中模式是成功的。因此,如果在我的代码命令中是“输入”,它应该在 $result[0] 中,但实际上它在 $result[1] 中。我想如果 $result[0] 未初始化,那么模式会失败,它会转到 if 语句。