请考虑以下事项:
use strict;
use Data::Dumper;
my $hash={['one','two']=>[1,2]};
print Dumper($hash);
=for comment
prints....
$VAR1 = {
'ARRAY(0x35358)' => [
1,
2
]
};
=cut
作为替代方案,哈希中的键可以被构造为“一个\ ttwo”,然后我可以根据制表符分隔符(在程序的后半部分重置数据时)分离出键的元素。
关于如何将密钥存储为数组引用的任何建议?
答案 0 :(得分:6)
不,普通(非tie
d)Perl哈希仅将字符串作为键。如果用作散列键,那么其他任何东西 - arrayrefs,对象等等都将被字符串化,这使得散列键不能用作你最初拥有的非字符串的东西。
Hash :: MultiKey使用tie
的魔力来回避这个限制。
答案 1 :(得分:3)
答案 2 :(得分:0)
您可以序列化数据结构(例如使用Data :: Dumper或其他类似工具)并将字符串用作哈希键:
my $hash = {
Dumper(['one','two']) => [1,2],
};
评估重新获取数据结构的关键。
答案 3 :(得分:0)
这里有什么需要?为什么要通过数组查找哈希元素?这似乎是一个HoH的案例,如:
use strict;
use warnings;
use Data::Dumper;
my $hash = { one => { two => [1,2] } };
print Dumper($hash);
打印
$VAR1 = {
'one' => {
'two' => [
1,
2
]
}
};
特别是因为您稍后会将数组拆分回其元素中。 要检查存在的东西,比如:
if (exists($hash->{one}) && exists($hash->{one}{two}))
&&&需要
if (exists($hash->{one}{two}))
如果不存在,则会自动归档 $ hash-> {one} 。