refs vs. my
Honza Pazdziora
adelton na informatics.muni.cz
Pondělí Říjen 7 19:51:06 MEST 2002
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