2012-06-27 116 views
3
use strict; 
use warnings; 
use Data::Dumper; 

my %h; 
my $undef = undef; 
$h{''}='test2'; 
$h{$undef} = 'test'; 

print Dumper (\%h); 

创建以下的输出:为什么undef变成空字符串?

$VAR1 = { 
      '' => 'test' 
     }; 

这究竟是为什么? 我有Perl 5.12.3。

谢谢你的时间。

回答

12

所有散列键都是字符串。用作散列键的非字符串值被强制为字符串,并且undef在该上下文中变为''

+0

谢谢你的混沌。这是在Perl文档中的某处吗? – Birdy

+3

@Birdy:'man perldata'(又名http://perldoc.perl.org/perldata.html)将散列定义为“由其相关字符串键索引的标量值的无序集合”。其他一切都来自于字符串键,Perl的自动类型提升和undef行为。 – chaos

+0

感谢您的时间! – Birdy

相关问题