2011-01-28 99 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。