You know, I could reconstruct the last week from random commitlogs and stuff, but why don't you just do that yourself - I'll still be here when you get back.
Yes that's right, Class::DBI happened to Siesta. It's great that it did, but I can't help but feel like I gave birth.
---
Had an idea for a new itch scratcher while eating bagels, and then forgot it afterwards. Happily it came back during a lull at the office, so here she blows:
package Foo; use Class::Final; sub frobnicate : final { my $self = shift; ... } package Bar; use base 'Foo'; sub frobnicate { my $self = shift; ... }
Now as close to compile time as possible, that should explode a bit like this:
Attempt to override final method Foo->frobnicate in subclass Bar, line 666
The idea came to me in a spell of the-horse-has-bolted thinking. Just
a few days before while doing some Class::DBI stuff I declared a
method called get
. As some of you might know, Class::DBI
depends on many many things, and inherits from a bunch of those, one
of which is Class::Accessor. Class::Accessor holds get
in
special regard, and so when I accidentally overrode it all the magic
came flying out of the sides without me noticing.
Of course for that I probably want something more like virtual methods, only less invasise. I picture a scheme whereby you could declare the methods you'd advise caution in overriding, and then when overriding you'd have a way to declare that you were paying the correct amount of attention, a little like this:
package Foo; use Class::Mumble; sub frobnicate : dress_up_warm { my $self = shift; ... } package Bar; use base 'Foo'; sub frobnicate : ok_mum { my $self = shift; ... }
Apart from I'm not even close to having the right set of keywords to use as decoration.
The good part is at least I know how to write it, the hard part will be in not melting during the random good weather.