【问题标题】:Retrieve hash between two subroutines检索两个子例程之间的哈希
【发布时间】:2013-03-20 13:06:51
【问题描述】:

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

sub function1{
    my code;
    return %hash;
}

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

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

我有以下错误:在散列分配中的奇数个元素

【问题讨论】:

    标签: perl hash arguments subroutine


    【解决方案1】:

    您只是将列表的第一个元素拉入散列(即大小均匀的列表,因此发出警告)。试试这个:

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

    【讨论】:

    【解决方案2】:

    另一种方法是通过引用传递哈希:

    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-08-10
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2021-01-07
      • 2014-07-02
      相关资源
      最近更新 更多