refs vs. my

Pavel Smerk xsmerk na informatics.muni.cz
Pondělí Říjen 7 19:59:24 MEST 2002


On Mon, Oct 07, 2002 at 07:39:42PM +0200, Jiri Polcar wrote:
>     Zdarvim,
> 
> 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?

Jak uz psal Adelton, jen doplnim, ze trochu o tom najdete v man perlref,
casti Symbolic references, mj.:

Only package variables (globals, even if localized) are visible to symbolic
references. Lexical variables (declared with my()) aren't in a symbol table,
and thus are invisible to this mechanism. For example:

    local $value = 10;
    $ref = "value";
    {
        my $value = 20;
        print $$ref;
    }
This will still print 10, not 20. Remember that local() affects package
variables, which are all ``global'' to the package.
							S pozdravem	P.


Další informace o konferenci Perl