2012-11-26 20 views
2

我發現了一行Perl代碼,它以我從未見過的方式使用pop。我一直認爲pop傳回陣列僅有一個項目,但下面的用法確實是不同的:在同一行中出現多個彈出框

my ($self, $loop, $resources) = @{pop @_}; 

看來,程序員用一行代碼,和一個pop命令,要抓住從三個項目參數數組,而不創建明確的for循環。這是如何工作的?

+2

如果你確實想「多個彈出窗口「,你可以使用'splice',例如'my($ x,$ z,$ z)= splice(@_,-3);' – ikegami

回答

10

在此示例中@_是一個數組,最後一個元素預計爲arrayref。

因此,pop(@_)@_獲取最後一個元素,然後將其解引用到數組中;將前3個元素保存到$ self,$ loop和$ resources中。

這可以寫成這樣:

my $self = $_[-1]->[0]; 
my $loop = $_[-1]->[1]; 
my $resources = $_[-1]->[2]; 

或者這樣:

my $temp = pop @_; 
my ($self, $loop, $resources) = @$temp; 

因此,實際上它是不是 「在一行中的多個彈出」

+0

啊,這樣做更有意義。 –

相關問題