Perl可以将数组引用存储为散列键吗?

时间:2010-06-21 09:28:23

标签: perl

请考虑以下事项:

use strict;
use Data::Dumper;
my $hash={['one','two']=>[1,2]};
print Dumper($hash);
=for comment
prints....
$VAR1 = {
          'ARRAY(0x35358)' => [
                               1,
                               2
                              ]
         };
=cut

作为替代方案,哈希中的键可以被构造为“一个\ ttwo”,然后我可以根据制表符分隔符(在程序的后半部分重置数据时)分离出键的元素。

关于如何将密钥存储为数组引用的任何建议?

4 个答案:

答案 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}