【发布时间】:2016-04-25 17:00:02
【问题描述】:
我希望我已经正确地陈述了这个主题。我有一个通过读取文件构建的哈希值。外部散列是组,然后内部散列是该组内的参数。每个参数值可以是标量或数组,数组可以从 0 或 1 开始。
我编写了一个返回参数值的子程序。调用函数必须确定返回值是标量还是数组。适用于标量。返回对数组值的数组的引用(看起来像 ARRAY(0x004f00))。使用Data::Dumper 会吐出看起来像数组的数据,但我不知道如何在代码中取消引用它。有人可以指出我做错了什么吗?
%HoH = (
flintstones => {
husband => "fred",
possessions => [ undef, "car", "record player", "rock" ],
pal => "barney",
pets => [ "bird", "dinosaur" ],
},
);
get_value("possessions");
sub get_value {
my $what_i_want = shift;
@groups = keys(%HoH);
foreach my $group ( @groups ) {
foreach my $param ( keys( %{ HoH {group} } ) ) {
if ( $param eq $what_i_want ) {
return $HoH{$group}{$param};
}
}
}
}
调用者将返回值分配给数组@return,因此对于标量,它应该将值放入$return[0]。
如果是数组,它应该填充数组。当我调用Dumper 时,它会打印出单引号中的标量和方括号中的数组,这是应该的。但是,当我使用 scalar(@return) 检查数组的大小时,它返回 1。
我尝试在末尾使用方括号取消对 return 语句的引用,看看是否可以返回一个标量,但没有运气。
【问题讨论】:
标签: arrays perl hash hash-of-hashes