正确的函数是defined
。 undef
取消定义$optional
。你想要做的是这样的:
sub myFunction {
my($length, $optional) = @_;
if (!defined $optional) {
# Do whatever needs to be done if $optional isn't defined.
}
else {
# Do whatever can be done if $optional *is* defined.
}
}
处理它的另一种方法(尤其是 Perl 5.10+)是使用“定义或”运算符 , //
,如下所示:
sub MyFunc {
my $length = shift;
my $optional = shift // 'Default Value';
# Do your stuff here.
}
这样做是检测是否shift @_
定义了返回值。由于您已经调用了一次 shift,我们现在正在测试第二个参数。如果已定义,请将值分配给$optional
. 如果未定义,则分配'Default Value'
给$optional
. 当然,您必须提出自己的理智默认值。
如果您陷入 Perl 5.10 之前的黑暗时代,您可以通过以下方式完成相同的操作:
my $optional = shift;
$optional = defined $optional ? $optional : 'Default value';
...或者...
my $length = shift;
my $optional = defined( $_[0] ) ? shift : 'Default value';
无论哪种方式,我通常更喜欢有一个健全的默认值,而不是一个完全独立的控制流路径。这通常是简化代码的好方法。