promenna predana odkazem

Honza Pazdziora adelton na informatics.muni.cz
Pátek Listopad 1 15:40:01 MET 2002


On Fri, Nov 01, 2002 at 02:59:04PM +0100, Pavel Smerk wrote:
> 
> Kurnja, co se clovek nedozvi, ja zil doted v domeni, ze se predava hodnotou

No, ono se v podstate (semanticky) predava hodnotou, ale jak rika
perlsub:

	The array @_ is a local array, but its elements are aliases
	for the actual scalar parameters.  In particular, if an
	element $_[0] is updated, the corresponding argument is
	updated (or an error occurs if it is not updatable).

Cili $_[0] je hodnota, nikoli reference, ale vyaliasovana ven. Tim
volanim samotnym se zadne kopirovani neprovadi. Jakmile na tu
promennou ale jednou sahnes a priradis si ji nekam dal, tak se jeji
hodnota s nejvetsi pravdepodobnosti kopirovat bude.

> a naopak ze k zadnemu kopirovani nedochazi pri $input = shift;, protoze pri
> normalnim poli se prece hodnota nekopiruje, ne? Uff, tenhle maly rozdil by
> mozna mohl byt zminen u dokumentace k shift nebo tak nekde. :)

Vyzkousej si to a zmer si velikost toho procesu -- jak pri prirazeni
my $x = $_[0], tak pri my $x = @_ se ta velikost zvetsi o velikost
toho skalaru, ktery prirazuji. Zatimco kdyz v te funkci ty hodnoty
prirazovat nebudu, tak se tim samotnym zavolanim funkce nic pametove
zajimaveho nestane. Jak na 5.6.1, tak na 5.8.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