为什么undef变成空字符串?

Bir*_*rdy 3 perl

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

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

print Dumper (\%h);
Run Code Online (Sandbox Code Playgroud)

创建以下输出:

$VAR1 = {
          '' => 'test'
        };
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我有Perl 5.12.3.

谢谢你的时间.

cha*_*aos 12

所有哈希键都是字符串.用作散列键的非字符串值被强制转换为字符串,并undef变为''该上下文.

  • @Birdy:'man perldata'(又名http://perldoc.perl.org/perldata.html)将哈希定义为"由其关联的字符串键索引的标量值的无序集合".其他一切都来自键是字符串,Perl的自动类型提升和undef的行为. (3认同)