2012-11-16 82 views
4

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

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

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

+1

'@ arr'或'@ {$裁判}',不要紧, “发生了什么”,否则。 – 2012-11-16 01:49:57

回答

10

这只不过是一个列表分配更多。 RHS的第一个值被分配给LHS的第一个变量,依此类推。这意味着

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

相同

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

*不*需要'@ $ aSvnPair'有四个元素;它可以有更多(将被忽略)或更少(将一些LHS变量设置为undef)。 – ysth

+0

@ysth,事实上,就像第二个片段一样。 – ikegami

+0

只需注意问题启动者:命名'$ aSvnPair'真的很奇怪。所以可能它是hashref,而不是arrayref。在这种情况下,第二个片段并不相同,并会失败。只是要注意关于变量名称中的“双”字... – PSIAlt

1

$aSvnPair应该是参考数组所以@{$aSvnPair}取消引用它。 (一个“参考”是一个指针的Perl等价物。)

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

参见本教程的一些例子:Dereferencing in perl

6

可变$aSvnPair是数组的引用。添加@ sigil会导致数组被引用。在这个例子中,数组是解压缩的,它的元素被分配给右边的变量。

这里是正在发生的例子:

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

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

此操作后,您会收到以下:

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