这是一个Perl程序:
use strict;
use warnings;
use Data::Dumper;
sub f {
foreach (()) { }
}
print Dumper(f());
输出:
$VAR1 = '';
由于f
没有显式返回任何值,并且没有在其中评估表达式,结果不应该是undef
吗?空字符串来自哪里?
答案 0 :(得分:13)
它没有完全返回空字符串;它已返回" false",一个内部Perl值(称为PL_no
)。这个假值在数字上为零,但却是空的。 Data::Dumper
无法直接将其表示为PL_no
,因此选择可行的代表。
您可以通过其他方式生成它:
$ perl -MData::Dumper -E 'say Dumper(1 eq 2)'
$VAR1 = '';
答案 1 :(得分:6)
由于
f
没有明确返回任何值,并且没有在其中评估任何表达式,结果应该是undef
吗?
不。 perldoc perlsub
表示返回值未指定:
如果未找到
return
且最后一个语句是表达式,则返回其值。如果最后一个语句是循环控制结构,如foreach
或while
,则返回的值未指定。
"未指定"是"我们不会记录确切的行为,因为我们可以随时更改它,你不应该依赖它。"现在,它将PL_no
作为LeoNerd explained返回;在未来的Perl版本中,它可能会返回undef
或其他一些东西。