从Perl哈希中删除密钥

时间:2015-05-23 05:37:22

标签: perl hash

我有一个散列,其中的键是哈希值。我想通过添加具有所需名称的密钥并删除不需要的密钥来重命名主哈希中的一些密钥。我成功添加了一个密钥,但我无法删除原始密钥。

此声明不起作用

delete $primary_hash{$sec_hash_key};

如果我打印$primary_hash{$sec_hash_key}的值,则返回$HASH(0X*)。我不知道语法中缺少什么?

2 个答案:

答案 0 :(得分:4)

在Perl中,哈希键是 始终 字符串。如果将非字符串对象指定为散列键,perl会将其字符串化以便能够将其用作键。因此,当你说:

  

我有哈希,其中[sic]键是哈希

你错了。它们不是哈希,而是字符串。

现在,如果你做了类似的事情:

my %h = (a => 1);
my %g = (%h => 2);

那会创建%g

(a => 1, 2 => undef);

相反,如果你做了%g = (\%h => 2),那么就会产生以下内容:

 %g = (
      'HASH(0x7ff92882cbd8)' => 2
 );

请注意,键是一个字符串。您无法从该字符串返回数据结构。

答案 1 :(得分:-3)

'删除'是什么意思?释放内存,或只是想要 在if语句中检查时,键是否未定义?

后者您可以设置密钥undef

$primary_hash{$sec_hash_key} = undef;

但请提供您问题的完整工作示例,所以 它可以被复制。