devios1
devios1

Reputation: 37985

What does ($a,$b,$c) = @array mean in Perl?

I'd google it if I could but honestly I don't know what to search for (an inherent problem with symbol-heavy languages)!

($aSvnRemote, $aSvnLocal, $aSvnRef, $aSvnOptions) = @{$aSvnPair};

My guess is that $aSvnPair is an array of 4 values (in which case it's a very poorly named variable!) and this is just splitting it into specific variable identities...?

Upvotes: 4

Views: 318

Answers (3)

ikegami
ikegami

Reputation: 385655

It's nothing more than a list assignment. The first value of the RHS is assigned to the first var on the LHS, and so on. That means

($aSvnRemote, $aSvnLocal, $aSvnRef, $aSvnOptions) = @{$aSvnPair};

is the same as

$aSvnRemote  = $aSvnPair->[0];
$aSvnLocal   = $aSvnPair->[1];
$aSvnRef     = $aSvnPair->[2];
$aSvnOptions = $aSvnPair->[3];

Upvotes: 10

lc.
lc.

Reputation: 116458

$aSvnPair should be a reference to an array so @{$aSvnPair} dereferences it. (A "reference" is the Perl equivalent of a pointer.)

The statement then assigns the values of this array to the four variables on the left-hand side, in order.

See this tutorial for some examples: Dereferencing in perl

Upvotes: 1

jordanm
jordanm

Reputation: 34924

The variable $aSvnPair is a reference to an array. Adding the @ sigil causes the array to be referenced. In this example, the array is unpacked and it's elements are assigned to the variables on the right.

Here is an example of what is happening:

$aSvnPair= [ qw(foo bar baz xyxxy) ];

($aSvnRemote, $aSvnLocal, $aSvnRef, $aSvnOptions) = @{$aSvnPair};

After this operation, you get the following:

$aSvnRemote  = "foo";
$aSvnLocal   = "bar";
$aSvnRef     = "baz";
$aSvnOptions = "xyxxy";

Upvotes: 6

Related Questions