2012-11-16 67 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";