Pole

Frantisek Darena darena na akela.mendelu.cz
Pondělí Březen 31 13:24:15 MEST 2003



On Sun, 30 Mar 2003, Petr Ruzicka wrote:

> Dobry den.
> Dekuju za radu, opravdu to po prostudovani materialu fungovalo. Jen by
> me zajimal maly detail, jestli muzu napsat neco jako:
>
>
> #!/usr/bin/perl -w
>
> ($serverx,$commentx) = vrat();
> print "\nxxx{$$serverx[0]}yyy{$$commentx[0]}zzz\n";
> .
> .
> .
> { Zaplnim pamet ...}
> .
> .
> print "xxx{$$commentx[1]}xxx";
> #-> Vypise se spravny obsah promenne? {200}. Neni to chyba ikdyz se vse
> #tvari OK?
>
>
>
> sub vrat {
> #  my(@server, na comment) = ((1,2,3),(100,200,300)); - nechapu proc tohle

tohle nefunguje proto, ze kulate zavorky uvnitr jinych kulatych zavorek
jsou uplne zbytecne. proto zapis ((1,2,3),(100,200,300)) je ekvivalentni
zapisu (1,2,3,100,200,300). v prirazeni na prave strane je na prvnim miste
seznamova promenna @server. protoze u poli se nijak nehlida delka a pole
narustaji tak, jak do nich strkame data, do teto promenne se ulozi maximum
hodnot na prave strane prirazeni, tzn. vsechno. v promenne @server bude
tedy vsech 6 hodnot, v promenne @comment bude prazdny seznzam.

> #  nefunguje (naplneni poli)?
>   my(@server) = (1,2,3);
>   my(@comment) = (100,200,300);
>   return (\@server,\@comment);
> }
>
>
>
> ---> 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
> 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...
>
>
>
>
>
>
>
>
>
> On Mon, 24 Mar 2003 19:29:36 GMT
> Honza Pazdziora <adelton na fi.muni.cz> wrote:
>
> > On Mon, Mar 24, 2003 at 07:57:14PM +0100, Petr Ruzicka wrote:
> > > Dobry den.
> > > Mam problem jak vytahnout vice poli z funkce, ktere nasledne ulozim
> > > do nejakych promennych.
> > > Priklad:
> > >
> > > (pole1_main, pole3_main, pole2_main) = vrat_vice_poli();
> > >
> > > sub vrat_vice_poli {
> > > .
> > > . /* vlozim nejake udaje do poli pole[1-3] */
> > > .
> > > return (@pole1, @pole2, @pole3, $cislo);
> > > }
> > >
> > > ---> V prikladu bych potreboval z funkce vrat_vice_poli ulozit
> > > obsahy poli pole[1-3] do poli v hlavnim programu pole[1-3]_main.
> > > Samozrejme ze se mi vsechna pole, ktera vraci funkce
> > > (vrat_vice_poli) ulozi do promenne pole1_main, a zbytek promennych
> > > bude prazdny :-(. Da se to nejak obejit?
> >
> > Obejit ne. Ale standardni reseni je, ze misto poli budete vracet
> > reference na pole, tedy skalarni hodnoty. Ty si ulozite do skalaru
> > a k tem polim se dostanete dereferenci, tedy pres @$pole1_ref.
> >
> > --
> > ---------------------------------------------------------------------
> > ---
> >  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