Jak alokovat pole; jak vytvorik referenci na kopii pole

Martin Sittek martin.sittek na infoprojekt.cz
Středa Červenec 31 11:39:18 MEST 2002


On 30.07.02, Honza Pazdziora wrote:
> 
> Jo, ale to Vám neudělá deep copy. Příklad:
> 
> 	my @a = ( [ 'jezek', 'krtek' ], 5 );
> 	my @n = @{[ @a ]};
> 	print "$a[0][1] $a[1] -> $n[0][1] $n[1]\n";
> 	$a[0][1] = 'slon';
> 	print "$n[0][1]\n";
> 	__END__
> 	krtek 5 -> krtek 5
> 	slon
> 

Takze jestli tomu dobře rozumín, tak konstrukce [@pole] dělá to,
že zkopíruje hodnoty @pole a vrátí na toto nové pole referenci.
V případě že jedna z hodnot původního pole je reference, pak
ji jednoduše také poze zkopíruje a tím pádem položka původního
i noveho pole odkazuje na stejnou referenci - pole.
Zajímavé, zajímavé... :-)

Tak daloko já sice jit nehodlám, můj případ by vypadal spíše
takhle:

my @cache;
my @a = ( 'jezek', 'krtek');
$cache[0] = [ @a ];
@a = ( 'slon', 'zirafa');
$cache[1] = [ @a ];

print Dumper @cache;


Tak ze zajímavosti: existuje něco co by zkopírovalo celou strukturu?

Každopádně dík za zajímavé informace.

--
Martin Sitek



Další informace o konferenci Perl