2014-07-17 29 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