2011-01-28 44 views
0

那裏 - 剛開始學習Perl。Perl子參考語法

這是我在做什麼讓一個數組成子功能 - 能不能做到在1號線更簡單?

sub my_sub { 
    my $ref_array = shift; 
    my @array = @$ref_array; 
} 
+4

可以*做什麼更簡單?你想做什麼?爲什麼要複製陣列在第一位? – tchrist 2011-01-28 23:13:40

+1

爲什麼你在一個數組上使用引用傳遞,然後去做一個全新的副本呢?爲什麼不直接使用`@ _` *原位*? – tchrist 2011-01-28 23:28:41

回答

3

如果你想在shift以及效果,

sub my_sub { 
    my @array = @{+shift}; 
} 

unary + operatorshift被視爲一種表達,不一個變量名。 (否則@{shift}@shift意味着相同。)

2

您可以簡化就像

sub my_sub { 
    my @array = @{$_[0]}; 
} 

哪裏@_是默認的陣列/列表,在參數傳遞中。

0

這是便宜了不少赫克:

local *array = shift(); 
+2

而不是至少相當於。 – hobbs 2011-01-28 23:52:59

2

另一種方法是不用擔心它是一個arrayref - 就這樣離開它,並將其用於其餘的sub-as。