Perl 5 version 22.4 documentation

parent

NAME

parent - Establish an ISA relationship with base classes at compile time

SYNOPSIS

  1. package Baz;
  2. use parent qw(Foo Bar);

DESCRIPTION

Allows you to both load one or more modules, while setting up inheritance from those modules at the same time. Mostly similar in effect to

  1. package Baz;
  2. BEGIN {
  3. require Foo;
  4. require Bar;
  5. push @ISA, qw(Foo Bar);
  6. }

By default, every base class needs to live in a file of its own. If you want to have a subclass and its parent class in the same file, you can tell parent not to load any modules by using the -norequire switch:

  1. package Foo;
  2. sub exclaim { "I CAN HAS PERL" }
  3. package DoesNotLoadFooBar;
  4. use parent -norequire, 'Foo', 'Bar';
  5. # will not go looking for Foo.pm or Bar.pm

This is equivalent to the following code:

  1. package Foo;
  2. sub exclaim { "I CAN HAS PERL" }
  3. package DoesNotLoadFooBar;
  4. push @DoesNotLoadFooBar::ISA, 'Foo', 'Bar';

This is also helpful for the case where a package lives within a differently named file:

  1. package MyHash;
  2. use Tie::Hash;
  3. use parent -norequire, 'Tie::StdHash';

This is equivalent to the following code:

  1. package MyHash;
  2. require Tie::Hash;
  3. push @ISA, 'Tie::StdHash';

If you want to load a subclass from a file that require would not consider an eligible filename (that is, it does not end in either .pm or .pmc), use the following code:

  1. package MySecondPlugin;
  2. require './plugins/custom.plugin'; # contains Plugin::Custom
  3. use parent -norequire, 'Plugin::Custom';

DIAGNOSTICS

  • Class 'Foo' tried to inherit from itself

    Attempting to inherit from yourself generates a warning.

    1. package Foo;
    2. use parent 'Foo';

HISTORY

This module was forked from base to remove the cruft that had accumulated in it.

CAVEATS

SEE ALSO

base

AUTHORS AND CONTRIBUTORS

Rafaël Garcia-Suarez, Bart Lateur, Max Maischein, Anno Siegel, Michael Schwern

MAINTAINER

Max Maischein corion@cpan.org

Copyright (c) 2007-10 Max Maischein <corion@cpan.org> Based on the idea of base.pm , which was introduced with Perl 5.004_04.

LICENSE

This module is released under the same terms as Perl itself.