gpt4 book ai didi

perl - Perl 中定义/未定义的使用

转载 作者:行者123 更新时间:2023-12-04 00:35:53 25 4
gpt4 key购买 nike

我计划将两个变量传递给 perl 函数,其中之一可能是可选的。我正在尝试检查是否定义了第二个,但它无法正常工作。当我将该函数调用为 myFunction(18) 时,它假定变量 $optional 已定义并转到 else 语句。但是在访问 $optional 变量时的 else 语句中,它会引发“未初始化”错误。这与我的预期完全相反。非常感谢任何帮助。

sub myFunction {
my ($length, $optional) = (@_);
if(undef($optional)
{
more code..
}
else
{
more code...
}
}

myFunction(18)

最佳答案

正确的函数是 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';

无论哪种方式,我通常更喜欢有一个理智的默认值,而不是一个完全独立的控制流路径。这通常是简化代码的好方法。

关于perl - Perl 中定义/未定义的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com