-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 に答える