加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – 我可以在Perl中命名一个匿名数组吗?

发布时间:2020-12-15 23:35:01 所属栏目:大数据 来源:网络整理
导读:#!/usr/bin/perl -wuse strict;my $aref = [1,2,3];my @a = @$aref; # this line$a[1] = 99;print "aref = @$arefn";print "a = @an"; 产生输出: aref = 1 2 3a = 1 99 3 输出显示@a和@ $aref不引用相同的数组. 标记的线是我的问题所在.标量$aref的值是对
#!/usr/bin/perl -w

use strict;

my $aref = [1,2,3];
my @a = @$aref;              # this line
$a[1] = 99;
print "aref = @$arefn";
print "a = @an";

产生输出:

aref = 1 2 3
a = 1 99 3

输出显示@a和@ $aref不引用相同的数组.

标记的线是我的问题所在.标量$aref的值是对匿名数组的引用.在标记的行中我希望能够使数组变量@a引用该数组,但是会发生的是匿名数组被复制而@a指的是匿名数组的副本.赋值和打印语句显示了这一点.

我知道当你分配给一个数组时,赋值的右边是一个列表上下文,所以@ $aref被强制转换为它的元素列表.有没有办法将名称@a赋予$aref引用的数组?

解决方法

我想知道你为什么要这样做?我认为这是一个性能问题,但通常的解决方案是通过引用传递您的数据.将$aref-> [1]写为$a [1]同样容易

您可以通过分配typeglob在包符号表中为您的引用添加别名,但别名必须是包变量

use strict;
use warnings;

my $aref = [1,3];

our @a;
*a = $aref;

$a[1] = 99;

print "aref = @$arefn";
print "a    = @an";

产量

aref = 1 99 3
a    = 1 99 3

有许多模块提供了很好的语法,并允许您为词法变量添加别名

这是一个使用Lexical::Alias的版本,它具有别名词汇变量的优点,并且可能比分配给typeglobs更强大. Data::Alias的工作方式非常相似.输出与上述相同

use strict;
use warnings;

use Lexical::Alias qw/ alias_r /;

my $aref = [1,3];

alias_r $aref,my @a;

$a[1] = 99;

print "aref = @$arefn";
print "a    = @an";

另一种方法是使用别名而不是alias_r

alias @$aref,my @a;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读