my %hash = ( 0=> , 1=>"Man");
my $key=0;
print "Exists\n"    if exists $hash{$key};
print "Defined\n"   if defined $hash{$key};
print "True\n"      if $hash{$key};
为什么上面的Perl代码打印所有三个打印语句?
它应该只打印Exists,不应该吗?
Mat*_*Mat 22
use strict; use warnings;.总是.
您的哈希声明没有按照您的想法进行,它具有奇数个元素.
试试这个:
use Data::Dumper;
my %hash = ( 0=> , 1=>"Man");
print Dumper(%hash);
您将看到$hash{0}设置为1,$hash{"Man"}存在但是undef,并且$hash{1}根本不存在.即你的哈希声明相当于:
my %hash = (0 => 1, "Man" => undef);
为什么会这样?这是因为:
=> 基本上相当于 ,($a,,$b)等同于($a,$b)
该文件的相关引用:
该
=>运营商大多只是视觉上更加鲜明的逗号代名词,但它也安排了左侧操作数被解释为一个字符串,如果它是将是一个合法的简单标识的裸词.
和:
空列表由表示
().在列表中对其进行插值无效.因此((),(),())相当于().类似地,插入没有元素的数组与在该点没有插入数组的情况相同.(......)
该列表
1,,3是两个列表的串联,1,并且3第一个列表以该可选逗号结尾.1,,3是(1,),(3)的1,3(类似的1,,,3是(1,),(,),3为1,3等).不,我们会建议你使用这个混淆.
将此应用于您的代码:
   (0 => , 1 => "Man");
is (0 , , 1 , "Man");
is (0 , 1 , "Man");
始终,始终,始终 use strict;和use warnings;您的代码:
use strict;
use warnings;
my %hash = ( 0=> , 1=>"Man");
my $key=0;
print "Exists\n"    if exists $hash{$key};
print "Defined\n"   if defined $hash{$key};
print "True\n"      if $hash{$key};
输出:
Odd number of elements in hash assignment at - line 3.
如果您希望元素存在但未定义,请使用undef:
my %hash = ( 0=> undef, 1=>"Man");