我在Perl脚本中使用Getopt::Std
,并希望传入零作为值。我正在检查使用unless()
正确设置的值。目前unless()
拒绝将该值视为未设置。
有没有办法让unless()
接受零作为有效值(任何非负整数都有效)。
这可能很简单,但几天前我从未接触过Perl!
富
答案 0 :(得分:9)
您需要使用unless defined <SOMETHING>
而不是unless <SOMETHING>
,因为Perl中的零值为false。
答案 1 :(得分:3)
Perl 5有several false values:0
,"0"
,""
,undef
,()
。
重要的是要注意,有些事情可能看起来应该是假的,但事实并非如此。例如,0.0
为false,因为它的数字等于0
,但"0.0"
不是(唯一的错误字符串是空字符串(""
)和"0"
)。
它还具有定义的概念。指定了一个赋值给它的值(除了undef)的变量被定义,并且在使用defined
函数进行测试时将返回true。
假设您希望参数为非负整数,那么测试它可能更好:
unless (defined $value and $value =~ /^[0-9]+$/) {
#blah
}