-1

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

这里是例子。

这里是对象类

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()};

这不返回任何内容 - 不移动取消引用数组?

那么该怎么做呢?

谢谢

4

1 回答 1

0

尊重什么数组?移位中涉及的唯一数组是@_$_[0]是一个标量,而不是一个数组。

使用以下方法完成(浅)数组复制:

@dst = @src;

所以你要

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

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

use Storable qw( dclone );

$this->{"array"} = dclone(shift);
于 2012-10-17T21:38:14.633 回答