检索两个子例程之间的哈希

时间:2013-03-20 13:06:52

标签: perl hash arguments subroutine

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

sub function1{
    my code;
    return %hash;
}

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

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

我有以下错误:

的哈希分配中奇数个元素

2 个答案:

答案 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);

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