在Perl中没有删除散列键

时间:2015-09-22 01:01:38

标签: perl hash key

在Perl中,你可以在什么情况下做这样的事情:

delete $ALIGN{$rna}{$dnaB};
print qq[deleted $dnaB\n] if ! exists $ALIGN{$rna}{$dnaB}; 

然后没有print语句执行?这让我头疼不已。谢谢!

1 个答案:

答案 0 :(得分:4)

您发布的内容将删除密钥。

$ perl -e'
   $ALIGN{$rna}{$dnaB} = "abc";
   delete $ALIGN{$rna}{$dnaB};
   print exists($ALIGN{$rna}{$dnaB}) ? qq[exists\n] : qq[doesn'\''t exist\n] ;
'
doesn't exist

唯一的情况是,如果%{ $ALIGN{$rna} }是一个行为不端的魔法变量(例如一个行为不端的绑定变量),那就不会这样了,但我强烈怀疑是这样的。

实际可能发生的是您在deleteexists之间重新创建了变量。

$ perl -e'
   sub foo { }
   $ALIGN{$rna}{$dnaB} = "abc";
   delete $ALIGN{$rna}{$dnaB};
   foo($ALIGN{$rna}{$dnaB}{foo});
   print exists($ALIGN{$rna}{$dnaB}) ? qq[exists\n] : qq[doesn'\''t exist\n] ;
'
exists