2014-11-24 69 views
1

我想找到一种方法,我可以返回哈希的所有键的数组引用。从哈希键返回数组引用或返回子例程

例如

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。

回答

3

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

return [ keys %hash ] 

如果一个子程序返回一个列表,你无法通过添加\使之成为一个参考:这将是分布式的,即你会得到引用数组到列表中的成员。不过,您仍然可以使用匿名阵列:

my $ref = [ sub_that_returns_list() ]; 
+0

太棒了!那就是我正在寻找的东西。你拯救了我的一天。谢谢 ! – Raghuveer 2014-11-24 22:51:04