数组深度复制而不是perl对象中的引用

时间:2012-10-17 21:27:31

标签: perl object reference deep-copy

我尝试了几个小时将子数组存储到对象中并失败了。也许有人可以告诉我如何使用perl存储深层副本。 sry我不知道这个问题是否清楚,但应该很容易解决......

这里的例子。

这里是对象类

package obj;

use strict;
use warnings;
require Exporter;
our @ISA = qw(Exporter);

sub new(\@){
    my $class=shift;
    my $this={};
    $this->{"array"}=shift;
    return bless($this,$class);
}

sub getArray(){
    my $this=shift;
    return $this->{"array"};
}

和测试类

use strict;
use warnings;
use obj;

my @a=(1,2);
push @a,3;
my $ob=obj->new(\@a);
@a=();
print @{$ob->getArray()};

这什么都不返回 - 不会取消引用数组?

那怎么办呢?

THX

1 个答案:

答案 0 :(得分:0)

尊重什么阵列?转换中涉及的唯一数组是@_$_[0]是标量,而不是数组。

(浅)阵列复制使用:

完成
@dst = @src;

所以你想要

@{ $this->{"array"} } = @{ shift };

如果您真的想要深层复制(尽管在您的示例中不需要它),请使用

use Storable qw( dclone );

$this->{"array"} = dclone(shift);