2012-10-19 118 views
0
use warnings; 
use strict; 

my @array = (1,2,3,4,5); 
my $v = 1; 

sub by_ref 
{ 
    my ($array_ref,$v) = @_; 
    @$array_ref = (0,0,0); 
    print "Array inside by_ref: @$array_ref\n"; 
} 

by_ref(\@array,$v); 
print "Array changed: @$array\n"; 

我通過@array通過引用(我假設我做對了)。我希望在子例程@array中所做的更改反映在調用子例程中。我不知道我出錯的地方。 預先感謝您。perl傳遞參考

+0

你是不是想改變列表?你也不要使用'$ v'。 – squiguy

+2

對我來說,這兩個打印語句都有三個零。最後一個應該是「@array」而不是「@ $ array」。 – chooban

+0

是的,我試圖改變列表... – Daanish

回答

6

正在打印的子程序也一樣,這是錯誤的之外數組引用。數組引用的範圍僅限於子例程。

所以你應該改變你的最後一行打印只有@array而不是@$array

像:

print "Array changed: @array\n";

+0

輸出:'array裏面的by_ref:0 0 Array changed:0 0 0' –

+0

這裏是工作示例:http://ideone.com/a0VFk –

+0

謝謝你爲了煞費苦心。 :) – Daanish

3

只是改變

print "Array changed: @array\n"; 

,它應該是確定