2

これまでに見たことのない方法で使用されている Perl コードの行を見つけましたpop。配列から正確に1つのアイテムを返すと常に思ってpopいましたが、次の使用法は異なります。

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

プログラマーは、明示的なループpopを作成せずに、1 行のコードと 1 つのコマンドを使用して、引数配列から 3 つの項目を取得しているようです。forこれはどのように機能しますか?

4

1 に答える 1

10

この例では、@ _は配列であり、最後の要素は配列参照であると予想されます。

したがって、@_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;

というわけで、実は「一行で複数ポップ」ではありません

于 2012-11-26T20:56:49.633 に答える