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