Perl概念动态引用数组

fra*_*ank 4 arrays perl reference dynamic

我试图在Perl中理解普通数组引用\ @array和[@array]之间的区别.

在下面的文章http://perl-begin.org/tutorials/perl-for-newbies/part2/中,它说"由方括号包围的数组([@array])返回对数组的动态引用.这个引用不直接影响其他值,这就是它被称为动态的原因."
上面的最后一句话,它表示引用不直接影响其他值,我不清楚,它们引用了什么其他值?一些网站复制并粘贴相同的解释.有人可以提供更好的解释,突出差异?

以下是他们提供的示例:

use strict;
use warnings;

sub vector_sum
{
    my $v1_ref = shift;
    my $v2_ref = shift;

    my @ret;

    my @v1 = @{$v1_ref};
    my @v2 = @{$v2_ref};

    if (scalar(@v1) != scalar(@v2))
    {
        return undef;
    }
    for(my $i=0;$i<scalar(@v1);$i++)
    {
        push @ret, ($v1[$i] + $v2[$i]);
    }

    return [ @ret ];
}

my $ret = vector_sum(
    [ 5, 9, 24, 30 ],
    [ 8, 2, 10, 20 ]
);

print join(", ", @{$ret}), "\n";
Run Code Online (Sandbox Code Playgroud)

但是,在上面给出的例子中,如果我改变了返回[@ret]; 到\ @ret,程序返回相同的结果,所以我不知道这是如何作为一个例子来说明动态参考.

谢谢.

pil*_*row 5

我质疑那个教程.当perl文档使用术语"动态"时,它们几乎总是指变量范围.您不会在perlrefperlreftut中找到"动态arrayref"的考虑因素.

那说:

\@array   # reference to @array
[@array]  # reference to an unnamed *copy* of @array
Run Code Online (Sandbox Code Playgroud)

考虑当我们对@ARGV的引用或对副本的引用时会发生什么:

$ perl -E '$a = \@ARGV; $a->[0] = "FOO"; say for @ARGV' blah blah
FOO
blah

$ perl -E '$a = [@ARGV]; $a->[0] = "FOO"; say for @ARGV' blah blah
blah
blah
Run Code Online (Sandbox Code Playgroud)