Thomas Sandlass skribis 2005-05-28 17:34 (+0200):
> > %hash = { key => undef, foo => 'bar' };
> > %hash<key> := $variable;
> > %hash<key> = 5; # $variable is now 5 too
> Sorry to interrupt, but wasn't {} not derefed when assigned
> to a % variable? Don't get me wrong, I like this meaning. And
> it seems to be intuitive once in a while ;)
You're right, {} there was wrong. I originally had $hash there, but
later realised using a ref was needlessly making the example more
complex.
> Why isn't \ good enough there? Because it requires $%hash<key> = 5?
Because transparent isn't opaque, and we need opaque, and the same
operator can'tbe used for both, and \ has always meant opaque, so it's
best to keep it that way and invent a new operator for the new feature,
keeping the existing operator for the existing feature.
> I propose %hash = { key => :\$variable, foo => 'bar' };
:\$variable looks like many things to me, but not an alias.
> Question: when a variable contains an opaque Ref and one
> uses this variable in an assignment as lhs, that still goes
> to the referee?
No. A reference ("opaque reference" in this thread) is a value.
Assignment throws away the old value.
We already have both opaque and transparent references, but jargon is
different: transparent references are called aliases and opaque
references are just called references.
> $var = 7;
> $ref = \$var;
> $$ref = 12; # should $ref suffice?
No, if you would use $ref, $ref itself would be 12, but $var not,
because the 12 would overwrite the reference in $ref.
> say $var; # prints 12
> $ref = 17; # detaches?
Yes.
> say $var; # still prints 12
Yes.
Juerd
--
http://convolution.nl/maak_juerd_blij.html
http://convolution.nl/make_juerd_happy.html
http://convolution.nl/gajigu_juerd_n.html