当我在函数的参数中传递它时,我会检索我的哈希表。在我的情况下,function1返回我的哈希表,然后我将参数中的哈希表传递给我的function2,在我的function2中,我将检索我的哈希表以进行浏览。
sub function1{
my code;
return %hash;
}
sub function2{
my %hash=$_[0];
my code browse my hash;
}
my %hash = function1();
function2(%hash);
我有以下错误:
的哈希分配中奇数个元素答案 0 :(得分:2)
您只是将列表的第一个元素拉入哈希(即偶数大小的列表,因此警告)。试试这个:
sub function1{
my code;
return %hash;
}
sub function2{
my (%hash) = @_;
my code browse my hash;
}
my %hash = function1();
function2(%hash);
您可以使用hashref获得所需内容:
sub function1{
my code;
return \%hash;
}
sub function2{
my $hash_ref=$_[0];
my code browse my hash;
}
my $hash_ref = function1();
function2($hash_ref);
答案 1 :(得分:1)
另一种方法是通过引用传递哈希:
sub function1{
# code here
return \%hash;
}
sub function2{
my $hashref = $_[0];
#code to use the hash:
foreach (keys %$hashref) { etc... }
}
my $hashref = function1();
function2($hashref);
my %realhash;
function2(\%realhash);
当您想要传递多个哈希或数组时,通过引用传递是必需的。它对于大量数据也更有效,因为它不会复制。但是,如果函数修改了通过引用传递的散列,则原始函数也将被修改。