这是一个Perl程序:
use strict;
use warnings;
use Data::Dumper;
sub f {
foreach (()) { }
}
print Dumper(f());
Run Code Online (Sandbox Code Playgroud)
这输出:
$VAR1 = '';
Run Code Online (Sandbox Code Playgroud)
由于没有显式返回值f,并且没有在其中计算表达式,结果不应该是undef?空字符串来自哪里?
Leo*_*erd 13
它还没有完全返回空字符串; 它返回了"false",一个内部Perl值(称为PL_no).这个假值在数字上为零,但却是空的.Data::Dumper不能直接表示它PL_no,因此选择一个可行的表示.
您可以通过其他方式生成它:
$ perl -MData::Dumper -E 'say Dumper(1 eq 2)'
$VAR1 = '';
Run Code Online (Sandbox Code Playgroud)
由于没有显式返回值
f,并且没有在其中计算表达式,结果不应该是undef?
不.perldoc perlsub说返回值未指定:
如果
return找不到,并且最后一个语句是表达式,则返回其值.如果最后一个语句是一个循环控制结构,如aforeach或awhile,则返回的值未指定.
"未指定"是"我们不会记录确切行为的简称,因为我们可以随时更改它,您不应该依赖它." 现在,它PL_no按照LeoNerd的解释返回; 在未来的Perl版本中,它可以返回undef,或者完全不同的东西.
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |