我希望我已经正确地陈述了这个主题。我有一个通过读取文件构建的哈希值。外部散列是组,然后内部散列是该组内的参数。每个参数值可以是标量或数组,数组可以从 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 语句,看看我是否可以返回一个标量,但没有运气。