Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re: Re: Re: Foo is not a Bar, why?

by liz (Monsignor)
on Dec 18, 2003 at 15:49 UTC ( #315544=note: print w/replies, xml ) Need Help??

in reply to Re: Re: Foo is not a Bar, why?
in thread Foo is not a Bar, why?

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 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 is the extra stuff about fields. Have you ever looked under the hood of Yuck!


Argh. The reason I didn't get any errors about the empty Bar package, was that I actually had a 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.

Replies are listed 'Best First'.
It's one of the reasons I wrote vars::i
by PodMaster (Abbot) on Dec 18, 2003 at 15:53 UTC
    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.

      That's all good and dandy, but even tough your module looks useful (and generic), I can't say I like the resulting interface — i.e. the use statement. I'd rather see something like this:
      use strict; package Foo; use isa qw(Bar); sub new { bless {},shift }

      The module can actually quite short:

      # file package isa; sub import { my $pkg = shift; my $caller = caller; no strict 'vars'; push @{"$caller\::ISA"}, @_; } 42;
      Et voilà:
      foo is a Bar

      Of course, with base doing the same and more, I don't know if there's much need for this here module.

Re: Re: Re: Re: Foo is not a Bar, why?
by Mr_Person (Hermit) on Dec 18, 2003 at 16:00 UTC
    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 line 10 BEGIN failed--compilation aborted at 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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://315544]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (5)
As of 2018-06-20 02:42 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (116 votes). Check out past polls.