http://www.perlmonks.org?node_id=315538


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.

Replies are listed 'Best First'.
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.