2016-02-12 81 views
0

我試圖從子例程返回一個匿名數組,但是,當轉儲返回的變量時,我只能看到一個值(我期待兩個)。Perl:從子例程返回匿名數組

這裏是我的代碼:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Data::Dumper; 

my $fruits_ref = generate_fruits(); 
print "Fruits: " . Dumper($fruits_ref) . "\n"; 

sub generate_fruits 
{ 
    return ("Apple", "Orange"); 
} 

此輸出:

Fruits: $VAR1 = 'Orange'; 

如何獲得子程序返回數組引用?

+1

你不是返回一個數組,你返回一個列表。數組是'[「Apple」,「Orange」]' – Arkadiy

+0

是否可以返回整個列表?我如何解開列表? –

+0

'$ fruits_ref = [generate_fruits()]' – Sean

回答

1

你沒有返回數組(或對數組的引用),你正在返回一個列表。對匿名數組的引用是["Apple", "Orange"]

當您將它傳遞給標量上下文時,List成爲它的最後一個元素。要通過列出背景下,你可以做

my @fruits = generate_fruits(); 

但是,這可能不是你所需要的東西 - 你似乎需要一個參考。爲此,只需使用方括號。

哦,另一種選擇是

my $fruits_ref = [generate_fruits()]; 
+0

Nit:'[「Apple」,「Orange」]'不是一個數組;它是對匿名數組的引用。一個數組可能是'@array =(「Apple」,「Orange」)'。 –

+0

@MattJacob謝謝,編輯 – Arkadiy

7

匿名數組用方括號構造。

return [ 'Apple', 'Orange' ]