Arrays Perl概念对数组的动态引用
我试图在Perl中理解普通数组引用之间的区别 \@数组和[@array] 在下面的文章中,它说 “被方括号([@array])包围的数组返回对数组的动态引用。此引用不会直接影响其他值,因此称为动态引用。”Arrays Perl概念对数组的动态引用,arrays,perl,dynamic,reference,Arrays,Perl,Dynamic,Reference,我试图在Perl中理解普通数组引用之间的区别 \@数组和[@array] 在下面的文章中,它说 “被方括号([@array])包围的数组返回对数组的动态引用。此引用不会直接影响其他值,因此称为动态引用。” 上面的最后一句话说引用不会直接影响其他值,我不清楚,它们引用的是什么其他值?一些网站复制并粘贴了相同的解释。有人能提供更好的解释来突出这些差异吗 以下是他们提供的一个示例: use strict; use warnings; sub vector_sum { my $v1_ref =
上面的最后一句话说引用不会直接影响其他值,我不清楚,它们引用的是什么其他值?一些网站复制并粘贴了相同的解释。有人能提供更好的解释来突出这些差异吗 以下是他们提供的一个示例:
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";
使用严格;
使用警告;
子向量_和
{
我的$v1\u ref=班次;
我的$v2\u ref=班次;
我的@ret;
我的@v1=@{$v1_ref};
my@v2=@{$v2_ref};
if(标量(@v1)!=标量(@v2))
{
返回未定义;
}
对于(我的$i=0;$i
我试图在Perl中理解普通数组引用\@array
和[@array]
之间的区别
它们都是完全相同类型的引用;它们只生成对不同数组的引用
[ ... ]
基本上和
do { my @anon = (...); \@anon }
所以
此引用不会直接影响其他值,因此称为“动态”
它不是所谓的“动态”,这不是我遇到过的动态定义。我对该教程提出质疑。当perl文档使用术语“动态”时,它们几乎总是指变量范围。在nor中,您不会发现“动态arrayref”的考虑
也就是说:
\@array # reference to @array
[@array] # reference to an unnamed *copy* of @array
考虑一下当我们引用或引用@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
仅举一个简单的例子:
my @array = (2, 3, 5, 6);
my $ref = \@array;
my $dynamic_ref = [@array];
print q{$array[1] = }, $array[1], "\n";
print q{$ref->[1] = }, $ref->[1], "\n";
print q{$dynamic_ref->[1] = }, $dynamic_ref->[1], "\n";
$array[1] = 10;
print "=" x 20, "\n";
print q{$array[1] = }, $array[1], "\n";
print q{$ref->[1] = }, $ref->[1], "\n";
print q{$dynamic_ref->[1] = }, $dynamic_ref->[1], "\n";
换句话说,您对原始数组的副本有一个引用,对原始数组的所有更改都不会影响此副本
my @array = (2, 3, 5, 6);
my $ref = \@array;
my $dynamic_ref = [@array];
print q{$array[1] = }, $array[1], "\n";
print q{$ref->[1] = }, $ref->[1], "\n";
print q{$dynamic_ref->[1] = }, $dynamic_ref->[1], "\n";
$array[1] = 10;
print "=" x 20, "\n";
print q{$array[1] = }, $array[1], "\n";
print q{$ref->[1] = }, $ref->[1], "\n";
print q{$dynamic_ref->[1] = }, $dynamic_ref->[1], "\n";