Jak alokovat pole; jak vytvorik referenci na kopii pole

Honza Pazdziora adelton na informatics.muni.cz
Úterý Červenec 30 12:35:46 MEST 2002


On Tue, Jul 30, 2002 at 12:04:34PM +0200, Martin Sittek wrote:
> > Jinak samozřejmě
> > 
> > 	@new = @pole;
> > 
> > zkopíruje prvky pole bez problémů také.
> 
> Ne na skaláry ale na pole (viz. výše uvedený příklad). Výsledek
> by měl odpovídat:
> 
> @pole = ([1,2,3], [2,3,4], ...);
> 
> No takže ve výsledku to budu asi řešit tak, že se na 'alokaci' vykašlu
> a pro ten druhý případ budy používat [@pole].

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

Mimochodem, možná že to, co hledáte, je Data::Dumper, kterým si
zobrazíte, jak vlastně ty struktury vypadají:

	use Data::Dumper;
	print Dumper \@a, \@n;

ukáže, že $n[0] je reference na prvek $a[0];

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
      ... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------


Další informace o konferenci Perl