From: "Dan Muey" <[EMAIL PROTECTED]>
> > Not sure this is what you are after but ...
> > 
> >     *x = \15;
> >     print "\$x=$x\n";
> >     $x = 16; # => Modification of a read-only value attempted at ...
> >     print "\$x=$x\n";
> > 
> > Jenda
> 
> You're a genius! 

No I'm not. I saw this somewhere in the docs.
 
> I'd love to understand further:
>  - why using a glob like that makes it readonly
>  - why you have to \15 instead 15 to assign it a value(is it to show
>  it's a scalar?) - does this work with arrays/hashes/etc of *x? - how
>  do assign something besides a nuber to $x? ( *x = \grabdata(); or *x
>  = \"hi there";) - how do I assign somthign to @x or %x etc...

1)
        *y = \$x;
changes $y into an alias to $x. From now it doesn't matter whether 
you assign or read $y or $x, they'll both contain the same value.

2)
        \15 
creates a scalar reference to a constant. See:
        print '\15 = ', \15, "\n";

3)
This means that
        *x = \15;
changes $x into an alias of 15.
And just like you can't write
        15 = 16;
you can't from now on write
        $x = 16;

Now this only works for constants. The only way to set a readonly 
variable based on the return of some function would be using eval"":

        { my $value = grabdata(parameters);
          $value =~ s/([\\'])/\\$1/g;
          eval "\*const = '$value'";
    }

And it's not possible to make a constant array or hash this way.
AFAIK.

Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed 
to get drunk and croon as much as they like.
        -- Terry Pratchett in Sourcery


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to