如何确定perl函数返回nothing
甚至不undef
?
示例:
sub test {
return;
}
或
sub test {}
问题是,好奇的行为函数也可以返回字符串,列表......并且是外包的一部分。因此,我无法与test() || undef
核对,因为空列表或字符串将会被undef
覆盖。
有没有人知道如何检查" null"值,所以我可以创建一个条件异常?
答案 0 :(得分:5)
如果使用
return
并且未指定返回值,则子例程返回空列表 在列表上下文中,标量上下文中的未定义值,或者没有任何内容 无效背景。如果没有找到
return
并且最后一个语句是表达式,则为 返回值。如果最后一个语句是循环控制结构 与foreach
或while
类似,返回的值未指定。的的 empty sub返回空列表。
- perlsub
在两种情况下,它都会返回空列表。所以你无法区分它们。
如果我理解正确的话,你试图避免使用undef覆盖空列表test () || undef
。但这并不重要。在Perl中,空列表和undef都被视为false。
以下全部评估为假
0
'0'
undef
'' # Empty scalar
() # Empty list
('')
答案 1 :(得分:-2)
没有办法"甚至不返回任何东西" *
如果您将其称为<{p>},则您描述的子例程test
的评估结果为undef
my $ret = test();
或如果您将其称为
,则为空列表my @ret = test();
您采取的措施取决于您的子程序可能返回的有效值。它是否设计为返回列表或标量?
显然,错误条件必须与任何有效的返回值不同,常见的方法是始终返回标量值,如果需要返回多个值,则可以作为引用
假设您有一个trash子例程,它返回给定范围内所有值的列表
use strict;
use warnings;
BEGIN { require v5.10 }
use feature 'say';
STDOUT->autoflush;
sub range {
my ($start, $end) = @_;
return if $end < $start;
return [ $start .. $end ];
}
my $range = range(1, 3) or die;
say for @$range;
$range = range(10, 1) or die;
say for @$range;
1
2
3
Died at E:\Perl\source\twice.pl line 19.
如果参数不正确,则返回值为undef
,并且调用代码可以根据需要使用该信息