gpt4 book ai didi

arrays - Perl 概念动态引用数组

转载 作者:行者123 更新时间:2023-12-02 06:38:16 25 4
gpt4 key购买 nike

我试图理解 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";

但是,在上面给出的示例中,如果我更改 return [ @ret ];到\@ret,程序返回相同的结果,所以我不确定这是如何作为示例来说明动态引用。

谢谢。

最佳答案

我对该教程提出质疑。当 Perl 文档使用术语“动态”时,它们几乎总是指变量范围。您不会在 perlref 中找到对“动态 arrayref”的考虑。也不perlreftut .

也就是说:

\@array   # reference to @array
[@array] # reference to an unnamed *copy* of @array

考虑一下当我们引用 @ARGV 或 @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

关于arrays - Perl 概念动态引用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16804331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com