2011-09-26 49 views

回答

3

在Perl中,所有函數參數都以列表形式傳遞,並存儲在特殊數組變量@_中。您可以將這些值複製到其他數組中,或者直接複製到散列中(就像使用任何數組/列表一樣)。

如果你正在寫一個函數,你可以直接傳遞參數到一個數組或哈希:

sub hashFunc { 
    my %args = @_; 

    .... 
} 

sub arrayFunc { 
    my @args = @_; 

    ... 
} 

要調用一個這樣的功能,只是通過他們,如果他們是一個列表或散列:

hashFunc(arg1 => 'someVal', arg2 => 'someOtherVal'); 
arrayFunc('someVal', 'someOtherVal'); 

如果你已經有一個可變的參數,只是通過他們和Perl拉平數組/哈希到參數列表:

hashFunc(%someHash); 
arrayFunc(@someArray); 
調用函數時,3210個
+0

它也正是通過區域在那裏我想擴大哈希 - 調用someFunc(%哈希),這使%散列成@_ ,而不是@_ [0] –

+0

@ts:是的,剛剛添加了 –

+0

@ts:你不需要那個「神祕的操作數」,這是Perl的默認行爲。 –

2

哈希也擴大到一個列表:

my %h = (a => 1, b => 2, c => 3); 

sub foo { 
    # prints the key-value pairs in unsorted order 
    print "@_\n"; 
} 

foo %h;