in reply to Re^3: Mocking isa under Test::Deep (sentinel)
in thread Mocking isa under Test::Deep
appears (to me) to be digging into the guts of perl (via Scalar::Util::blessed()) to prevent their users from using fairly ordinary OO techniques to bypass their checks
Actually not. You could remove the use of Scalar::Util::blessed() and the code would function identically. Test::Deep is using isa() to enable users to extend the Test::Deep::Cmp functionality using ordinary OO techniques.
If they had actually used blessed() in a way that prevents such extending then the "breaking change" would have been avoided. Replace the new code:
if (! $Expects and Scalar::Util::blessed($d1) and $d1->isa("Test::Deep +::Cmp"))
with code that looks too closely under the covers:
if (! $Expects and Scalar::Util::blessed($d1) eq "Test::Deep::Cmp")
and the fact that isa() was intentionally broken in order to do a sloppy hack to subvert draconian type checking would not have mattered.
- tye
In Section
Meditations