我是Perl的新手,我尝试检查我的2个参数是否以“ - ”或“ - ”开头。我的代码:
if ($ARGV[0] ~= /^-*/ || $ARGV[1] ~= /^-*/) {
但是当论据是“abc abc”时,它仍然会通过这个条件。
提前致谢。
答案 0 :(得分:2)
首先,binding operator为=~
,而不是~=
。这很容易记住,因为它有一个对应物 - !~
(意思是'不匹配')。但那是一个简单的错字。
然而,更重要的是方法本身:如果要匹配'-'
和'--'
,则模式应写为/^--?/
。但是,您是否认为'---abc'
是一个有效的论证并不清楚。如果没有,正则表达式应如下所示:
/^--?[^-]+$/
...否则仅仅检查相应参数的第一个字符对“ - ”就足够了,使用正则表达式显然是一种矫枉过正。例如:
if (substr($ARGV[0], 0, 1) eq '-' || substr($ARGV[1], 0, 1) eq '-') {
# invalid params detected
}
尽管如此,您尝试实施它的方式仍应写为/^-+/
,而不是/^-*/
。最后一个匹配字符串开头的任何连字符数 - 包括0个连字符。这就是abc
字符串通过检查的原因。事实上,任何字符串都会通过检查。