in reply to Inheritance in the same file

B is an already existing package.

require will try to load a file from disk and fail if that file does not exist.

The combination means that some package "B" gets loaded from disk, so your require B never fails.

Your real problem is one of initializsation. @B::ISA gets initialized after your main program has run, so the inheritance chain is never set up.

I recommend reordering your source file to have the main program at the bottom, or better, move the packages out into separate files.

Replies are listed 'Best First'.
Re^2: Inheritance in the same file
by stephen (Priest) on Jun 11, 2013 at 17:19 UTC

    Alternatively, you can wrap the class code in a BEGIN block. That will ensure that your classes are initialized before the main code gets run. You don't need "require" or '1;' when the code is in the same file. Also, 'use strict' is lexically scoped, so you really only need to say it at the top.

    #!/usr/bin/perl use strict; use warnings; my $a = B->new(); BEGIN { package A; sub new { my ( $class, %args ) = @_; my $self = bless {}, ref($class) || $class; return $self; } package B; @B::ISA = qw(A); sub _init { my ( $self, %args ) = @_; $self->{_title} = $args{title} || undef; } }


      Thank you!
Re^2: Inheritance in the same file
by yoda54 (Monk) on Jun 11, 2013 at 07:58 UTC
    Thanks much!!!