Pole

Honza Pazdziora adelton na informatics.muni.cz
Pondělí Březen 31 14:57:42 MEST 2003


On Sun, Mar 30, 2003 at 02:42:00PM +0200, Petr Ruzicka wrote:
> 
> #!/usr/bin/perl -w
> 
> ($serverx,$commentx) = vrat();
> print "\nxxx{$$serverx[0]}yyy{$$commentx[0]}zzz\n";
> .
> { Zaplnim pamet ...}

Co to znamena "Zaplnim pamet"? Poslete konkretni minimalni priklad
kodu, ktery Vam pusobi problem, tak, abychom to mohli vzit mysi
a pustit ve svem interpretru.

> sub vrat {
> #  my(@server, na comment) = ((1,2,3),(100,200,300)); - nechapu proc tohle

Protoze jak uz zde bylo receno, temi zavorkami kolem 1,2,3
a 100,200,300 jste nevyrobil nic magickeho. Je to uplne to same jeko
((1),((2),3,((100,200),300))), a sice seznam sesti skalaru. Mozna jste
chtel pouzit

	my ($server, $comment) = ([1,2,3], [100,200,300]);

tedy vytvorit si anonymni pole a reference na ne priradit do skalaru.

> #  nefunguje (naplneni poli)?
>   my(@server) = (1,2,3);
>   my(@comment) = (100,200,300);
>   return (\@server,\@comment);
> }

Pouzijte vyse uvedena anonymni pole.

> ---> Docetl jsem se ze pokud v bloku {} pouziji konstrukci: my promenna,
> tak se mi na konci bloku zrusi (ale v pameti data zustavaji). To znamena

Ano, my oznacuje lexikalni promennou.

> ze by se mi mela zrusit i v te funkci sub. V tomto pripade se vsak vse
> tvari v poradku, ale ja nevim, zda se mi pri dalsi praci nahodou na
> misto hodnot pole (@server a @comment) nebudou zapisovat nejaka data -
> ktera mi puvodni chtena data prepisou...

Teto nejistoty se zbavite nejlip prave tim, ze si vytvorite svoje
datove struktury pomoci anonymnich poli. Tam je pak pekne videt, ze to
je datova struktura ktera nema jmeno, pouze referenci na sebe, a ze
tedy pri pristim vytvoreni vznikne nova struktura, ktera nebude mit
sanci tu starou prepsat.

Je nicmene pravda, ze to my je runtime vec a ze v tomto pripade kazdy
pruchod pres my @server = ( 1, 2, 3 ); vyrobi nove pole. Ale muze to
pusobit matoucim dojmem a kdyz pak nahodou vyhodite to my mimo funkci
nebo mimo cyklus, tak uz to jedna a ta sama promenna bude. Anonymni
pole jsou Vas pritel.

-- 
------------------------------------------------------------------------
 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