Kde je reference

Honza Pazdziora adelton na informatics.muni.cz
Úterý Duben 10 12:42:34 MEST 2001


On Mon, Apr 02, 2001 at 09:42:28AM +0200, Ondrej Koala Vacha wrote:
> 
> $x[2]=5;
> $x[2]{'v1'}=5;
> $x[2]{'v2'}=6;
> 
> print $x[2],"\n";
> print $x[2]{'v1'},"\n";
> print $x[2]{'v2'},"\n";
> 
> -----------------------------cut----------------------
> 
> print $y[2] vytiskne refrenci na HASH - jasne. Ale
> print $x[2] vytiskne 5, kdyz by mel vytisknout take referenci na hash.
> Nebo je to tak, ze pokud je misto na referenci jiz obsazene, dava se
> jinam? Pokud si pamatuji, nikde jsem na popis tohoto pripadu nenarazil,
> ale uvitam nasmerovani.

Zasekl jsem se na tom stejne jako Vy, ale Uri a Ron me v clpm
nasmerovali.

Vse se vyjasni, pokud nahoru date use strict (a nasledne my na ty
promenne). Hlaska potom bude

Can't use string ("5") as a HASH ref while "strict refs" in use at - line 4.

Potiz je v tom, ze autovivication (tedy vytvoreni anonymniho objektu
a vraceni reference na nej) funguje pouze u nedefinovanych hodnot.
Pokud je hodnota promenne jiz definovana (a neni to reference, nebo ma
spatny typ), vezme se jako symbolicka reference. Cili zde se jako
reference pouzije retezec '5'.

Uri v http://tlc.perlarchive.com/articles/perl/ug0002.shtml rika:

	Autovivification of references only occurs when you
	dereference an undefined value. If there is a defined value
	(and not a reference of the proper type), it will be used as
	a symbolic reference and not be what you want. Remember,
	symbolic references are black magic and should only be used
	in very few cases and never by newbies. You should be using
	strict which disables symbolic references and would thereby
	detect the error of dereferencing a variable which has
	a value other than undef or a proper reference.

Cili adresujete jine misto v pameti nez v pripade toho @y, a diky
tomu je mozne, ze zaroven vidite tu skalarni hodnotu a zaroven hodnotu
touto hodnotou symbolicky adresovanou.

Pekne cviceni,

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
   .project: Perl, DBI, Oracle, MySQL, auth. WWW servers, DBD::XBase.
------------------------------------------------------------------------


Další informace o konferenci Perl