如何检查子程序是否返回*没有*

Fie*_*ete 2 perl subroutine

如何确定perl函数nothing不返回undef

例子:

sub test {
   return;
}
Run Code Online (Sandbox Code Playgroud)

要么

sub test {}
Run Code Online (Sandbox Code Playgroud)

问题是,好奇的行为函数也可以返回字符串,列表......并且是外包的一部分.所以我无法检查,test() || undef因为空列表或字符串将被覆盖undef.

有没有人知道如何检查"null"值,所以我可以创建一个条件异常?

Cha*_*hak 5

如果使用return并且未指定返回值,则子例程将在列表上下文中返回空列表,在标量上下文中返回未定义的值,或在void上下文中返回任何内容.

如果return找不到,并且最后一个语句是表达式,则返回其值.如果最后一个语句是一个循环控制结构,如a foreach或a while,则返回的值未指定.空子返回空列表.

- perlsub

在两种情况下,它都将返回空列表.所以你无法区分它们.

如果我理解正确你,你试图避免使用undef覆盖空列表test () || undef.但那没关系.在Perl中,空列表和undef都被视为false.

以下全部评估为假

0
'0'
undef
''  # Empty scalar
()  # Empty list
('')
Run Code Online (Sandbox Code Playgroud)