0

当我在函数的参数中传递它时,我会检索我的哈希表。在我的情况下,function1 返回我的哈希表,然后我将我的哈希表作为参数传递给我的 function2,在我的 function2 中,我将检索我的哈希表以浏览它。

sub function1{
    my code;
    return %hash;
}

sub function2{
    my %hash=$_[0];
    my code browse my hash;
}

my %hash = function1();
function2(%hash);

我有以下错误:哈希分配中的奇数个元素

4

2 回答 2

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);
于 2013-03-20T13:11:43.680 回答
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);

当您想要传递多个哈希或数组时,通过引用传递是必要的。对于大量数据,它也更有效,因为它不会复制。但是,如果函数修改了通过引用传递的哈希,则原始的也会被修改。

于 2013-03-20T13:16:27.527 回答