in reply to Modifying/extending a superclass' data

These question suggest that there are some basics about Perl OO that you're missing. You might want to see Perl Object Oriented Meta-Tutorial for pointers to where to start. For example, to subclass, you'd need to make sure the argument to base is in quotes:

use base 'MathML::Entities';

However, for your question about making functions available, you just need to make sure the functions are imported in the first place, and then specify them to be exported. For that, you have to do it longhand, you can't use base as that doesn't import any functions.

package MathML::Entities::Approximate; use strict; use MathML::Entities qw(function1 function2); # import the desired fun +ctions use vars qw( @ISA @EXPORT ); @ISA = qw( MathML::Entities Exporter); @EXPORT = qw( function1 function2 ); # re-export them

Unfortunately, to the last point, if %ENTITIES is a "my" variable in MathML::Entities, you can't access it directly without "breaking the rules" using something like PadWalker.

-xdg

Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Replies are listed 'Best First'.
Re^2: Modifying/extending a superclass' data
by kiz (Monk) on Nov 17, 2005 at 14:06 UTC
    These question suggest that there are some basics about Perl OO that you're missing.

    Absolutely! I've spent two years in JavaLand, and forgotten all the nifty Perl stuff that was in my head..

    Unfortunately, to the last point, if %ENTITIES is a "my" variable in MathML::Entities, you can't access it directly without "breaking the rules"...

    I can't even access it to make a copy, can I? - no way of making %M::E::A::ENTITIES ?

    If I understand it correctly, if %ENTITIES was an "our" variable, I could have added data to it - and the E::M methods would have accessed the now-longer-hash, yes?



    -- Ian Stuart
    A man depriving some poor village, somewhere, of a first-class idiot.
      I can't even access it to make a copy, can I? - no way of making %M::E::A::ENTITIES ?

      Think of a "my" as similar to "private" data in Java (if I remember my Java, that is). It's pretty much totally inaccessable without using XS to violate the encapsulation and troll through the Perl guts directly. Your best bet may be to do a copy/paste into your subclass and modify it that way. Ugly hack and dependency, but probably the sanest alternative if you really need it.

      -xdg

      Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

        Your best bet may be to do a copy/paste into your subclass and modify it that way.

        Yeuck! - there are over two thousand entries in that hash.. <grin />

        I've changed %M::E::ENTITIES to have "our" scope - which seems to work. My only worry is missing some problem about memory leak, an oversized memory foot-print, or soke form of data-clash - but the scoping should take care of that...

        :-)



        -- Ian Stuart
        A man depriving some poor village, somewhere, of a first-class idiot.