OK, so forget uplevel and just reimplement what base actually does.

How's that for a contradition of the spirit your main argument for using it? :-) (Having one source for every piece of information.) When base changes, it won't be a base equivalent with just an add-on.

It's a pity base.pm didn't do it right from the start. If you're going to act like "use" then you should do it properly.

People disagree with that "right" behaviour is, but base doesn't pretended to act like use. It can be used for any class, not just classes loaded with use. It's a module to setup inheritance at compile-time (which was important for fields).

This breaks the rule of having 1 source for every piece of information and leads to subtle errors.

You'll likely have to mention the class again, if you plan to use it in the code below of where you load it. (Update: Err, was about base classes, and you'll likely not name the base class again in the current package (but probably someplace else).) If you're hardcore about this, and you'll have to be if you implement a module like this and uses it, you shouldn't use hardcoded class names either. You should use $theclass = The::Class::; or something equivalent and use the variable instead, in case you need to change the class. But OAOO isn't about mentioning everything once. It's about expressing relations once. There's semantic abstraction and there's syntactic abstraction. I'm not saying that you don't agree with me on that, I'm merely clarifying. This is a both semantic and syntactic abstraction, but I'm trying to say that there is a limit on what is realistic in real life.

In theory I agree with you. I like it the same way I like base's abstraction of loading and @ISA assignment -- I probably should've said that clearer in my reply. I like both semantic and syntactic abstraction. I'm a complete OAOO idiot. But in real life I disagree about this particular example. That's why I said "... what good it really does" (emphasis added). With this you save one occurance of the class name but you likely have at least one more occurance and already have a much harder sync problem; in comparision this is nothing and will probably be taken care of rather automatically. The cost is to confuse the maintenance people and create another hardly needed dependancy.

If this was a patch to base or if it was a standard module it'd be another issue...

ihb

See perltoc if you don't know which perldoc to read!


In reply to Re^4: use base 'XYZ' and exporting by ihb
in thread use base 'XYZ' and exporting by japhy

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.