これまでに見たことのない方法で使用されている Perl コードの行を見つけましたpop
。配列から正確に1つのアイテムを返すと常に思ってpop
いましたが、次の使用法は異なります。
my ($self, $loop, $resources) = @{pop @_};
プログラマーは、明示的なループpop
を作成せずに、1 行のコードと 1 つのコマンドを使用して、引数配列から 3 つの項目を取得しているようです。for
これはどのように機能しますか?
この例では、@ _は配列であり、最後の要素は配列参照であると予想されます。
したがって、@_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;
というわけで、実は「一行で複数ポップ」ではありません