2012-10-17 3 views
-1

객체에 하위 배열을 저장하는 데 몇 시간의 노력을했지만 실패했습니다. 어쩌면 누군가가 perl로 깊은 사본을 저장하는 방법을 보여줄 수 있습니다. 이 질문이 명확한 지 알 수는 없지만 쉽게 해결할 수 있어야합니다 ...펄 객체의 참조 대신에 deepcopy 배열

여기 예. 여기

개체 클래스

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

답변

0

어떤 배열입니까? 교대에 관련된 유일한 배열은 @_입니까? $_[0]은 배열이 아닌 스칼라입니다.

A (얕은) 배열의 복사본을 사용하여 수행됩니다 : (필요 귀하의 예제에서 거기에 없다하지만) 당신이 진정 깊은 사본을 원하는 경우

@dst = @src; 

그래서 당신이

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

을 원하는,

use Storable qw(dclone); 

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

를 사용하거나하여 단순 복사본을'$이 - 난 이렇게하면> { '배열'} = [@에게 {시프트}] ' – ysth

+0

가 출력이 될 것이다 스칼라 및 첫 번째 배열 요소 1 반환합니다. 나는 @ a =() 덮어 쓰기 때문에 깊은 복사본이 필요하다고 생각합니다. 그래서 참조 된 배열은 없어집니다. Storable qw (dclone) 사용; 내가 원하는 걸해라. thx – pyr0

+0

@ pyr0, 내 코드 또는 ysth를 참조하는 경우 모르겠지만 배열의 단일 요소를 복사하지 마십시오. – ikegami