chromatic wrote:
On Wednesday 05 April 2006 02:02, Adam Kennedy wrote:
But it's also why UNIVERSAL::isa/can and people adding higher-version
dependencies below their existing lower-dependency modules is bad.
The code used to work just fine, and now it doesn't.
This is a strange definition of "work just fine", as before UNIVERSAL::isa and
UNIVERSAL::can, I had to deal with way too many bug reports of other people's
code breaking mine. In other words, it didn't work.
And now in return, we have new modules that changes the way EVERYBODY
else's code works, and changes the meaning of that code instead, so
Test::MockObject gets less spurious bug reports.
UNIVERSAL::isa and UNIVERSAL::can remain a good idea implemented without
sufficient hubris.
As I've mentioned a few times, a much better option would have been
something like warnings::isacan, to warn about bad calls, but which when
the few of us that NEED to use as a function, knowing exactly what we
mean by using it that way, don't have it magically and forcibly and
mistakenly converted to a method.
And to make matters worse, now there's a warning suppression option, so
they now just magically change the way the code works, potentially
breaking it without warning.
For example, Template::Toolkit may *never* work with Test::MockObject because
the author refuses to ask the author of CGI.pm to fix a bug in the latter
module, despite apparently knowing about it for several years and apparently
preferring to break my code instead.
Turnabout is not fair play when it comes to bugs.
I'm not going to release knowingly broken code, just so my broken code can run
brokenly on really old versions of Perl. What good is that?
I wasn't aware Test::MockObject was fundamentall broken. As far as I was
aware it does the right thing. And if someone uses UNIVERSAL::isa the
wrong way, that's their problem to fix.
And as for the version issue, you should do what you like there, because
you introduced it as a new module. Just make sure the version dependency
is explicit.
Adam K