Last minutes changes of schedule meant that I did my talk on Tieing and Overloading Objects in Perl today instead of on Friday. I've now put the slides online.
I'm currently sitting an ad-hoc session of london.pm talks listening to Piers talking about doing very scary things by overloading the global definition of bless!
Oh, and my new article is now on perl.com.
Very nice article, I liked it.
A question, though: I admit I don't understand all the magic behind overloading constants, but shouldn't the example on page 2
be testing the result of the constructor call withreturn __PACKAGE__->new($_[0]) || $_[1]
defined()
? Is it possible, with all the overloading going on, that the result of new('0/1')
would be interpreted as a number 0 and thus appear to fail?
The article had some very nice examples in it, especially for the use of constant overloading. I used to think that was only good for confusing your coworkers with "zero but true"-hacks.
I'm not sure your arguments hold true, that the code would be less clean in Java. Having multiple methods would be much nicer in my opionion. Maybe it's just me, but I think that elsif
is one of the ugliest constructs ever invented (right after the switch statement).
I know that its not possible in Perl, but I think its a shame that you cant implement the constructor in 3 lines using double dispatch (as described in Kent Becks pattern book).
For a very useful use of overloading, check out my module Class::Void
Disclaimer: I don't expect anyone to find my module useful, but I use it every day as way to make really dumb business objects