为什么map返回一个空数组?

Kar*_*lek 3 perl dictionary

我在Perl中有一个问题,我不明白.我把它剥离到这个非常短的代码.

为什么Perl的map函数返回一个空数组?不应该返回9 undef秒的阵列吗?

sub mySub{
    return;
}

my @arr = (1 .. 9);
my @arr2 = map( mySub($_), @arr );

print @arr . ' ' . @arr2, "\n";
Run Code Online (Sandbox Code Playgroud)

它打印"9 0".

它可能很简单,但perldoc没有帮助.

FMc*_*FMc 8

对你的问题更一般的答案是这样的:当return没有参数使用when时,它返回的值取决于调用上下文:

list context    returns an empty list
scalar context  returns an undefined value
Run Code Online (Sandbox Code Playgroud)

例如:

use strict;
use warnings;
use Data::Dumper;

my (@list);
sub mySub { return }
@list = map(       mySub($_), 1..2); print Dumper(\@list);
@list = map(scalar mySub($_), 1..2); print Dumper(\@list);
Run Code Online (Sandbox Code Playgroud)

输出:

$VAR1 = [];
$VAR1 = [
          undef,
          undef
        ];
Run Code Online (Sandbox Code Playgroud)


inn*_*naM 7

你的子程序没有返回undef,它返回一个空列表.9次和空列表仍然是一个空列表.

尝试显式返回undef,输出会有所不同.