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,程序返回相同的结果,所以我不知道这是如何作为一个例子来说明动态参考.
谢谢.
我质疑那个教程.当perl文档使用术语"动态"时,它们几乎总是指变量范围.您不会在perlref和perlreftut中找到"动态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)