0

快速提问:我想将以下变量存储在哈希中:

my %hash1;
my %hash2;
my %hash3;
my @array1;
my @array2;
my @array3;

最终结果是:

Hash
    hash1Name
             {key1=>val1,key2=>val2}
    hash2Name
             {key1=>val1,key2=>val2}
    hash3Name
             {key1=>val1,key2=>val2}
    array1Name
             [element1,element2,...]
    array2Name
             [element1,element2,...]
    array3Name
             [element1,element2,...]

我为什么要这样做:这一切都是在一个函数(子)中完成的,所以我想在一个哈希中返回所有数据。

这可能吗?

只创建一个可以保存这些变量的类会更好吗?

谢谢

4

3 回答 3

3

您可以将任何标量存储在散列或数组中。标量包括对数组或散列的引用:

my $hash = {
  hash1Name => \%hash1,
  hash2Name => \%hash2,
  hash3Name => \%hash3,
  array1Name => \@array1,
  array2Name => \@array2,
  array3Name => \@array3,
}

如果您想这样做,Perl 没有类型系统会妨碍您。但是你,程序员,现在有责任正确处理散列的内容,不管是什么类型。如果它能够实现更简洁的设计,则可以使用 OO。但请注意

  1. 无论如何,底层对象通常会由这样的哈希实现
  2. 当基本的数据结构足够时,为了 OO 的缘故,OO 不必要地使代码复杂化。
于 2013-06-26T10:38:35.480 回答
2

是的,这是可能的,而且最容易用词法变量完成:

sub mysub {
    my %hash1;
    my %hash2;
    my %hash3;
    my @array1;
    my @array2;
    my @array3;
    ...
    my %all = (
         hash1  => \%hash1,
         hash2  => \%hash2,
         array1 => \@array1,
         # etc
    );
    return \%all;
}

您返回一个标量值,它是一个哈希引用,包含所有数据。

于 2013-06-26T10:37:25.970 回答
1
my %Hash = (
   hash1Name  => \%hash1,
   hash2Name  => \%hash2,
   hash3Name  => \%hash3,
   array1Name => \@array1,
   array2Name => \@array2,
   array3Name => \@array3,
);

但是您可能想要引用哈希:

my $Hash = {
   hash1Name  => \%hash1,
   hash2Name  => \%hash2,
   hash3Name  => \%hash3,
   array1Name => \@array1,
   array2Name => \@array2,
   array3Name => \@array3,
};
于 2013-06-26T10:37:33.520 回答