无法使用perl中的函数内部引用来打印值

anu*_*g86 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";
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

Inside the function

3
Run Code Online (Sandbox Code Playgroud)

TLP*_*TLP 7

你的任务是错的:

$ref = @_;
Run Code Online (Sandbox Code Playgroud)

因为在标量上下文中,数组返回其大小,而不是其元素.当您在左侧有标量值时,会施加标量上下文.你应该做:

my ($ref) = @_;
Run Code Online (Sandbox Code Playgroud)

要么

my $ref = shift;   # shifts first argument from @_
Run Code Online (Sandbox Code Playgroud)

您还需要更改$ref->[1]$ref->[0],否则您将引用错误的元素.Perl数组从索引0开始.

你应该做的就是使用

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

哪会给你错误:

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

这是怎么回事.您将大小分配1$ref,然后尝试将其用作数组ref:$ref->[1]