# from Andy Armstrong # on Sunday 01 April 2007 07:53 am: >Agreed. May I propose the additional requirement that the >documentation contain a lengthy treatise on the benefits of true[1] >object orientation? > >[1] For whichever value of 'true' the author prefers.
Yes, but then it should also include a requirement that all accessor methods be coded longhand. No Class::Accessor, Class::Accessor::Classy or Moose or anything silly like that. I suppose it might be okay to allow inlined typeglob assignment of generated accessors IFF they're created in a recursive lexically-scoped function in a BEGIN block. BEGIN { my $def = sub { my $setter = sub {...}; my $getter = sub {...}; .... # bit of hand-waving no strict 'refs'; *{$setname} = $setter; *{$getname} = $getter; }; my %accessors_for; # special overrides go in here my $mk_accessors; $mk_accessors = sub { my $name = shift(@_) or return; ($accessors_for{$name} || $def)->($name); # lexical polymorphism $mk->accessors(@_); }; $mk_accessors(qw(foo bar baz)); } That's just my first-crack at it though. We should probably make $def recursive and leverage ternary parametric polymorphism to get rid of the $getter/$setter variables. my $def; $def = sub { (@_ % 2) ? (map({$def->($_ . 'et', @_)} qw(g s))) : ( sub { my ($type, $name) = @_; my $subref = eval('sub {shift->{' . $name . '}' . ( ($type =~ m/^s/) ? '= shift' : . '') . '}'); no strict 'refs'; *{$type . '_' . $name} = subref;}->(@_); ); }; I think it also needs a package global variable containing a subref for easy customization/overrides of the setter (though I suppose we would be better off with a subref-wrapped eval'd environment variables PERL_GETTER and PERL_SETTER?) I propose that we standardize this (in the peterbuilt normal form, of course) and make it part of the uses_oo metric (requiring verbatim pastage save the %accessors_for dispatch declaration.) Now the only question is whether it should use inside-out objects and/or a tied dispatch table connected to an ftp server. --Eric -- The only thing that could save UNIX at this late date would be a new $30 shareware version that runs on an unexpanded Commodore 64. --Don Lancaster (1991) --------------------------------------------------- http://scratchcomputing.com ---------------------------------------------------