我有脚本:
#!/usr/bin/env perl
sub t0 {
return; # We return nothing for ERROR
}
sub t1 {
@z = ();
return @z; # We return array (which maybe empty) for no ERROR
}
Run Code Online (Sandbox Code Playgroud)
在标量上下文中,我可以区分错误和OK状态:
my $x1 = t0(); # undef
my $x2 = t1(); # 0
Run Code Online (Sandbox Code Playgroud)
在列表上下文中调用时,有没有办法区分从子例程返回的错误和空数组?
my @x1 = t0(); # empty list
my @x2 = t1(); # empty list
Run Code Online (Sandbox Code Playgroud)
我觉得我需要"0E0"(零但是为真)但是对于列表上下文.
在这种情况下,在空列表和错误之间进行抖动的方法是返回数组引用,例如
sub t0 {
return undef; # We return undef for ERROR
}
sub t1 {
@z = ();
return \@z; # We return array (which maybe empty) for no ERROR
}
Run Code Online (Sandbox Code Playgroud)
所以基本上这些函数在列表上下文中的行为不同.它们总是返回单个标量,可能是undef,表示错误,或返回对数组的引用.