Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

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 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.


Comment on Re: Re: Re: Foo is not a Bar, why?
Select or Download Code
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 isa.pm can actually quite short:

      # file isa.pm 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 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://315544]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (14)
As of 2015-07-02 17:29 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 (44 votes), past polls