refs vs. my
Jiri Polcar
polcar na physics.muni.cz
Pondělí Říjen 7 20:00:44 MEST 2002
Aha! Diky.
--
JP
On Mon, Oct 07, 2002 at 07:52:35PM +0200, Honza Pazdziora wrote:
> On Mon, Oct 07, 2002 at 07:39:42PM +0200, Jiri Polcar wrote:
> >
> > narazil jsem na problem pri pouziti nazvu promenne v oznaceni jine
> > promenne. A to v pripade, ze jsem mel promennou, jejiz nazev jsem
> > vytvarel deklarovanou pomoci 'my'. Lepsi bude priklad:
> >
> > 1) $name = 'scalar';
> > ${$name} = 'hodnota scalaru';
> >
> > print "scalar: $scalar";
> >
> >
> > 2) my $scalar;
> >
> > $name = 'scalar';
> > ${$name} = 'hodnota scalaru';
> >
> > print "scalar: $scalar";
> >
> > Prikla (1) funguje tak, jak by clovek cekal, tedy v promenne $scalar
> > bude 'hodnota scalaru'. Pri pouziti (2) dostanu hlasku:
> >
> > Use of uninitialized value in concatenation (.) or string at...
> >
> > Na promennou deklarovanou monoci `my' se nemohu takto odkazat? Proc?
>
> Protoze ona takto neexistuje. Neexistuje v tabulce symbolu, muzete si
> to predstavit tak, ze existuje na zasobniku. Kdyz delate to ${$name},
> tak rikate "v runtime najdi promennou podle jmena, ktere je v teto
> promenne". Jenze ona je podle toho jmena nenalezetelna, protoze to
> jmeno neexistuje. Neni to globalni promenna.
>
> Co samozrejme udelat muzete je
>
> eval "\$$name = 'hodnota scalaru'";
>
> kterym provedete vyhodnoceni uvedeneho Perloveho vyrazu. Ovsem
> v tomhle prikladu dojde ke kompilaci toho prirazeni a soucasti te
> kompilace je i vyhodnoceni toho jmena promenne. Zatimco ${$name} je
> vyhodnoceni jmena promenne za behu, a to pracuje s globalnimi
> promennymi (tedy temi, co jsou v tabulkach symbolu jednotlivych
> packagu).
>
> --
> ------------------------------------------------------------------------
> 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