> One of the features I like about Eiffel is what Meyer calls the Uniform > Access principle...It sounds as though Perl 6 is heading towards supporting > this. Have we actually got there?
That's the intention, yes. The details still need to be nutted out, but it seems very likely that if you write: class Foo { # version 1 my $.bar_attr is public; } then you'll get an automagically created lvalue accessor method that will allow you to write: my $foo = Foo.new(); $foo.bar_attr = 1; and then later define a real C<Foo::bar_attr> method to encapsulate it: class Foo { # version 2 my $.bar_attr; method bar_attr is rw($rvalue) () { if exists $rvalue { croak "Negative value" if $rvalue < 0; $.bar_attr = $rvalue; } return $.bar_attr; } } More interestingly, it may also be that, by default, the C<operator:{}> (i.e. hash-look-up) method of a class invokes the accessor of the same name as the key, so that: $foo.bar_attr = 1; could also be written: $foo.{bar_attr} = 1; and still have the same Uniform Access effect. This would help Perl 6 support legacy Perl 5 OO code (not to mention legacy Perl 5 OO coders ;-) Damian