in reply to Re: Inheritance strangeness
in thread Inheritance strangeness

Change test.pl to
#!/usr/bin/perl require 'C.pm'; C->foo();
and you get:

55. perl test.pl
Can't locate object method "foo" via package "C" at test.pl line 5.

Replies are listed 'Best First'.
Re^3: Inheritance strangeness
by PodMaster (Abbot) on Sep 08, 2004 at 07:57 UTC
    Watch for the bold
    C:\e>echo package A;sub foo{666};1; >A.pm
    
    C:\e>echo package B;use base 'A';1; >B.pm
    
    C:\e>echo package C;use base 'B';1; >C.pm
    
    C:\e>perl -e"require 'C.pm';die C->foo()"
    Can't locate object method "foo" via package "C" at -e line 1.
    
    
    C:\e>perl -le"require 'C.pm';print for %INC"
    XSLoader.pm
    C:/Perl/lib/XSLoader.pm
    Carp.pm
    C:/Perl/lib/Carp.pm
    warnings/register.pm
    C:/Perl/lib/warnings/register.pm
    Exporter.pm
    C:/Perl/lib/Exporter.pm
    vars.pm
    C:/Perl/lib/vars.pm
    strict.pm
    C:/Perl/lib/strict.pm
    C.pm
    C.pm
    warnings.pm
    C:/Perl/lib/warnings.pm
    base.pm
    C:/Perl/lib/base.pm
    B.pm
    C:/Perl/lib/B.pm
    
    C:\e>

    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.

Re^3: Inheritance strangeness
by Zed_Lopez (Chaplain) on Sep 08, 2004 at 07:59 UTC

    This does what you'd expect:

    use C; C->foo();

    Update: In my test code, I had a use lib "[directory with A.pm, B.pm, C.pm]" before use C;. That means I explicitly got the new B.pm instead of the system one. Everyone else is right that if you're picking up the system B.pm first, that's a problem.