将零传递给Getopt :: Std

时间:2010-09-07 15:09:51

标签: perl getopt

我在Perl脚本中使用Getopt::Std,并希望传入零作为值。我正在检查使用unless()正确设置的值。目前unless()拒绝将该值视为未设置。

有没有办法让unless()接受零作为有效值(任何非负整数都有效)。

这可能很简单,但几天前我从未接触过Perl!

2 个答案:

答案 0 :(得分:9)

您需要使用unless defined <SOMETHING>而不是unless <SOMETHING>,因为Perl中的零值为false。

答案 1 :(得分:3)

Perl 5有several false values0"0"""undef()

重要的是要注意,有些事情可能看起来应该是假的,但事实并非如此。例如,0.0为false,因为它的数字等于0,但"0.0"不是(唯一的错误字符串是空字符串("")和"0")。

它还具有定义的概念。指定了一个赋值给它的值(除了undef)的变量被定义,并且在使用defined函数进行测试时将返回true。

假设您希望参数为非负整数,那么测试它可能更好:

unless (defined $value and $value =~ /^[0-9]+$/) {
    #blah
}