在列表上下文中调用时,有没有办法区分从子例程返回的错误和空数组?

Eug*_*kov 1 perl

我有脚本:

#!/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"(零但是为真)但是对于列表上下文.

red*_*neb 6

在这种情况下,在空列表和错误之间进行抖动的方法是返回数组引用,例如

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,表示错误,或返回对数组的引用.