in reply to Re^4: Who am I? Inheritance question
in thread Who am I? Inheritance question

Respond better how? If I've an object blessed into Ye::Olde::Proxy and it provides all the interface of Real::Deal, what can it do to inform blessed() that it should return Real::Deal instead of Ye::Olde::Proxy? Ye::Olde::Proxy would be too accurate since the proxy object wants to appear to everyone except itself to be a Real::Deal object. With ref(), it can install its own function into CORE::ref that knows how to lie properly. Is the idea that it's easier to get a lying blessed() function than it is to override CORE::ref()?

⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊

Replies are listed 'Best First'.
Re^6: Who am I? Inheritance question
by dragonchild (Archbishop) on Mar 17, 2006 at 12:23 UTC
    package Scalar::Util; my $old_blessed = do { no strict 'refs'; delete ${ "Scalar::Util::blessed" }; }; sub blessed { my $val = $old_blessed->(@_); if ( defined $val && $val eq 'Ye::Olde::Proxy' ) { return 'Real::Deal'; } return $val; }

    Update: Fixed bug.


    My criteria for good software:
    1. Does it work?
    2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

      Just an FYI, \&foo isn't a valid target for delete(). If your example even works, it's a bug.

      ⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊