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