2014-11-24 68 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