2014-07-17 60 views
2

爲什麼我無法在其內部函數中使用引用打印值?無法在perl中使用引用內部函數打印值

sub fun { 
    $ref = @_; 
    print "\n Inside the function $ref->[1] \n"; 
} 
my @arr=(2,3,4); 
fun (\@arr); 
my $ref2 = \@arr; 
print "\n$ref2->[1]\n"; 

輸出我得到的是:

Inside the function 

3 

回答

7

這是你的任務是錯誤的:

$ref = @_; 

因爲在標量上下文,數組返回它的大小,而不是它的元素。標量上下文是在左側標量值時施加的。你應該這樣做:

my ($ref) = @_; 

或者

my $ref = shift; # shifts first argument from @_ 

您還需要改變$ref->[1]$ref->[0],否則你會參考錯誤的元素。 Perl的數組開始索引爲0

什麼,你應該做的是使用

use strict; 
use warnings; 

這將給予你的錯誤:

Can't use string ("1") as an ARRAY ref while "strict refs" in use at line ... 

這是發生了什麼。您將大小1分配到$ref,然後嘗試將其用作陣列參考:$ref->[1]

+0

明白了。謝謝:) – anurag86

+0

@ anurag86不客氣。 – TLP