2012-06-27 118 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

相關問題