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