perl - 如何在 perl 中返回一个空数组/长度为 0 的数组?

标签 perl

我想返回一个空的数组,而不是一个空的列表

我有一个返回数组的子项。我希望能够用它来做到这一点:

my $count = scalar getArray();

我是这样做的:

sub getArray {
    if ( !isGood() ) {
        return ();
    } else {
        my @array = calculateSomehow();
        return @array;
    }
}
my $count = scalar getArray();

!isGood()$count 变成 undef 而不是 0 时,我大吃一惊!看完perlfaq4 ,我意识到这是因为 getArray() 是在标量上下文中评估的,因此 list () 被评估为标量,而 scalar( () ) undef,而 my @array;标量 (@array) 为 0。

现在的问题是:如何最优雅地返回一个空的数组,以便$count0 if !是好的()?我只是想出了:

# This is kind of kludgy: Dereference an anonymous array ref. Really?
return @{[]};

# I use a temporary variable for this. Really?
my @empty;
return @empty;

是否有任何更简洁/更优雅的方法来返回长度为 0 的数组(空数组)或其他一些制作标量 getArray( ) 评估为 0?

最佳答案

如果您在两种情况下都只返回一个数组,这可能是最清楚的:

sub getArray {
    my @array;
    @array = calculateSomehow() if isGood();
    return @array;
}

但要以最少的方式修改原始代码,请使用 wantarray

if (!isGood()) {
    return wantarray ? () : 0;
}

关于perl - 如何在 perl 中返回一个空数组/长度为 0 的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36072378/

相关文章:

regex - 如何删除除数字和给定列表之外的所有单词?

javascript - 在解析期间检测内容中的正则表达式

perl - 等同于 2 个子程序的最佳方法?

windows - 在名称长度超过 220 个字符的目录中使用 Windows 上的 Perl 创建文件

windows - 为什么我只能在 Windows 上使用 Tie::File 打开 2045 个文件?

multithreading - 只是为阻塞操作启动新线程是不好的做法(Perl)

linux - Perl:在继续之前等待 xdg-open 退出

perl - "use diagnostics"不起作用

javascript - Perl 单击按钮与 WWW::Mechanize

perl - 什么是 Perl 中的\0(以反斜杠为前缀的数字)?