快速提问: 我想将以下变量存储在Hash中:
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,...]
为什么我要这样做: 那么这都是在一个函数(sub)中完成的,所以想要在一个哈希中返回所有数据。
这可能吗?
创建一个可以容纳这些变量的类会不会更好?
由于
答案 0 :(得分:3)
您可以在散列或数组中存储任何标量。标量包括对数组或散列的引用:
my $hash = {
hash1Name => \%hash1,
hash2Name => \%hash2,
hash3Name => \%hash3,
array1Name => \@array1,
array2Name => \@array2,
array3Name => \@array3,
}
Perl没有类型系统,如果你想这样做会妨碍你。但是,程序员现在负责正确处理哈希的内容,无论其类型如何。如果它能够实现更清洁的设计,您可以使用OO。但请注意
答案 1 :(得分: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;
}
返回单个标量值,该值是包含所有数据的哈希引用。
答案 2 :(得分: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,
};