从散列键返回数组引用或返回子例程

时间:2014-11-24 21:07:50

标签: arrays perl hash

我试图找到一种方法,我可以返回散列的所有键的数组引用。

例如

sub example {
    my %hash = (
        'one' => [1,11,111],
        'two' => [2,22,222],
        'three' => [3,33,333]
         .
         .
        'nine' => [9,99,999]
    );

 return sort keys %hash;
}

现在,如果我得到哈希的所有键,我将得到一个包含一个,两个...九的数组。我问我怎么能在这里返回数组引用?

我必须做这样的事吗?

my @array = sort keys %hash;
return \@array;

有更好的方法吗?像return \@{sort keys %hash}

这样的东西

如果那是不可能的,那么如何创建一个返回数组的子例程的引用?

在我的示例中,如果我按原始return sort keys %hash进行操作,然后我想将此数组作为对其他子例程的引用传递,我该怎么办?

示例:

sub other_routine {
    my $array_ref = shift;

    ## do something with $array_ref;
}

other_routine (\example());

如果我的问题不明确,请告诉我。提前谢谢。

P.S。 - 不幸的是,我必须在一个非常老的服务器上运行这个脚本,它有一个perl 5.8.3。

1 个答案:

答案 0 :(得分:3)

匿名数组和哈希值也存在于5.8.3中。你甚至可以在代码中使用它们。

return [ keys %hash ]

如果一个子程序返回一个列表,你就不能通过添加一个\使它成为一个引用:它将被分发,即你将获得一个对成员的引用数组。列表。但是,您仍然可以使用匿名数组:

my $ref = [ sub_that_returns_list() ];