gpt4 book ai didi

perl 函数忽略 undef 参数

转载 作者:行者123 更新时间:2023-12-05 09:24:30 32 4
gpt4 key购买 nike

我正在将一些参数传递给函数,其中一个可能未定义。

$a = ($config->function(param('a'),'int'));

我的模块包含一个如下所示的函数:

sub function{                    
my $self = $_[0];
my $t = $_[1];
my $type = $_[2];
print "$self,$t,$type<br/>";
}

我试过用 shift 代替 @_ 语法,但没有任何变化。问题在于,如果使用未定义的 param('a') 调用 $config->function,它会打印如下:

MY_FUNC=HASH(0x206e9e0),名称,似乎 $t 被设置为 $type 应该设置的值,而 undef 被完全忽略。

最佳答案

undef 在参数列表中完全有效。我怀疑这里的问题是 param 函数返回一个空列表,而不是 undef

sub function {
no warnings 'uninitialized';
print join "/", @_;
}

function(undef,"foo"); # outputs "/foo"
function((), "foo"); # outputs "foo"

function 的参数列表中,param 函数在列表上下文中计算。

sub param1 {
return; # undef in scalar context, but empty list in list context
}

sub param2 {
return undef; # scalar ctx: undef, list ctx: list with one undef elem
}

function(param1(), "foo"); # param1() -> () ... outputs "foo"
function(param2(), "foo"); # param2() -> (undef) ... outputs "/foo"

解决方法是确保您的 param 函数是在标量上下文中计算的。

function(scalar param1(), "foo");    # now outputs "/foo"

请注意,实际上在您的 Perl 子例程中说 return undefconsidered by some to be a code smell .

关于perl 函数忽略 undef 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12095603/

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