2015-05-23 109 views
-2

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

这种说法是不工作

delete $primary_hash{$sec_hash_key}; 

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

+0

你确定'$ sec_hash_key'是一个字符串吗? – PYPL

+0

你可以用'Data :: Dumper'打印你的数据结构吗? – fugu

+2

'使用Data :: Dumper;''打印Dumper \%primary_hash;' – fugu

回答

-3

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

后者您可以实现我的设置密钥undef

$primary_hash{$sec_hash_key} = undef;

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

+1

请参阅'perldoc -f delete' http://perldoc.perl.org/functions/delete.html – shawnhcorey

4

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

我有散在它的[原文]键散列

你就错了。他们不是散列,他们是字符串。现在

,如果你不喜欢的东西:

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

这将创造%g为:

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

相反,如果你这样做%g = (\%h => 2),那会沿着线创建的东西:

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

请注意,密钥是一个字符串。您不能从该字符串返回数据结构。