4

如果可以的话,我会用谷歌搜索它,但老实说,我不知道要搜索什么(符号繁重的语言的固有问题)!

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

我的猜测是这$aSvnPair是一个由 4 个值组成的数组(在这种情况下,它是一个命名非常糟糕的变量!),而这只是将其拆分为特定的变量身份......?

4

3 回答 3

10

这只不过是一个列表作业。RHS 的第一个值分配给 LHS 上的第一个 var,依此类推。这意味着

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

是相同的

$aSvnRemote  = $aSvnPair->[0];
$aSvnLocal   = $aSvnPair->[1];
$aSvnRef     = $aSvnPair->[2];
$aSvnOptions = $aSvnPair->[3];
于 2012-11-16T01:18:49.473 回答
6

该变量$aSvnPair是对数组的引用。添加@印记会导致数组被引用。在这个例子中,数组被解包,它的元素被分配给右边的变量。

这是正在发生的事情的一个例子:

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

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

执行此操作后,您将获得以下信息:

$aSvnRemote  = "foo";
$aSvnLocal   = "bar";
$aSvnRef     = "baz";
$aSvnOptions = "xyxxy";
于 2012-11-16T01:16:26.790 回答
1

$aSvnPair应该是对数组的引用,因此@{$aSvnPair}取消引用它。(“引用”是指针的 Perl 等价物。)

然后,该语句将该数组的值按顺序分配给左侧的四个变量。

有关一些示例,请参阅本教程:在 perl 中取消引用

于 2012-11-16T01:13:57.763 回答