I think it's also a mistake to give C<my> two unrelated meanings.
Yes. I fully concede this point. A declarator is the way to go.
They are lexically scoped aliases to properties of the current block.
Err. Properties or traits? Presumably traits, since they're declared at compile-time. This feeds rather interestingly into my suggestion that a C<where> modifier be a way of setting properties on the call. See below.
Perhaps we should just go with that:
property $foo = 0;
Or whatever word we choose, I don't care:
prop $foo = 0;
I could certainly live with this.
And if we had C<where> as a mechanism for setting the value of such traits during a call, we'd get the rather tidy:
foo('bar') where error('fatal');
sub foo($arg) { return 1 if $arg eq 'bar' given prop $error { when 'fatal' { die "horribly" } when 'verbose' { warn "direly"; continue; } default { return 0 } } }
have $foo = 0;
Please, no. Far too close to C<has>.
this $foo = 0; here $foo = 0; block $foo = 0; static $foo = 0; ;-)
I still think C<prop> is the way to go.
Actually has/have is kinda cute:
Each object has... We all have...
Yes, "cute" is exactly the right word for it. <sound of alarm bells ringing>
;-)
Damian