Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: Foo is not a Bar, why?

by PodMaster (Abbot)
on Dec 18, 2003 at 15:29 UTC ( #315538=note: print w/ replies, xml ) Need Help??


in reply to Foo is not a Bar, why?

And that be the argument for slaping the @ISA assignment in a BEGIN block

my $foo = Foo->new; print "foo is".($foo->isa( 'Bar' ) ? '' : ' _not_')." a Bar\n"; package Bar; package Foo; BEGIN { @Foo::ISA = qw(Bar); } sub new { bless {},shift } __END__ foo is a Bar

MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
** The third rule of perl club is a statement of fact: pod is sexy.


Comment on Re: Foo is not a Bar, why?
Download Code
Re: Re: Foo is not a Bar, why?
by Mr_Person (Hermit) on Dec 18, 2003 at 15:39 UTC
    Or using the nicer-looking use base. It will complain that the Bar package is empty, so I put a sub in it, but then it works fine.
    my $foo = Foo->new; print "foo is".($foo->isa( 'Bar' ) ? '' : ' _not_')." a Bar\n"; package Bar; sub null {} package Foo; use base Bar; sub new { bless {},shift }
      Hmmm... which version of Perl are you using? I don't need a sub null {} inside Bar to get it to run as expected.

      Slaven Rezic pointed out (on p5p) the use of base.pm as an alternative. I assumed it would always require an external file: apparently it doesn't do that (anymore, anyway, I seem to remember that at one point it did. But I am probably wrong about that).

      What I don't like about base.pm is the extra stuff about fields. Have you ever looked under the hood of base.pm? Yuck!

      Liz

      Update:
      Argh. The reason I didn't get any errors about the empty Bar package, was that I actually had a Bar.pm as an external file hanging around from some previous testing. So yes, you need something in there, not necessarily a sub null {} though, a $VERSION = '0.01' also does the trick. Thanks to Mr. Person for his perseverance proving me wrong in this matter.

        It's one of the reasons I wrote vars::i
        my $foo = Foo->new; print "foo is".($foo->isa( 'Bar' ) ? '' : ' _not_')." a Bar\n"; package Bar; sub null {} package Foo; use vars::i qw[ @ISA Bar ]; sub new { bless {},shift } __END__ foo is a Bar

        MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
        I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
        ** The third rule of perl club is a statement of fact: pod is sexy.

        I'm on Perl 5.6.1, and it gives me:
        Base class package "Bar" is empty. (Perhaps you need to 'use' the module which defines that packa +ge first.) at test.pl line 10 BEGIN failed--compilation aborted at test.pl line 10.
        If I don't put the sub null {} in, but that wouldn't generally be a problem for a real situation because you'd almost always have something in the package.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://315538]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (16)
As of 2015-07-06 20:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (83 votes), past polls