The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Package::Alias - alias one namespace into another

SYNOPSIS

  use Package::Alias Foo    => 'main',
                     P      => 'Really::Long::Package::Name',
                     'A::B' => 'C::D',
                     Alias  => 'Existing::Namespace';

DESCRIPTION

This module aliases one package name to another. After running the SYNOPSIS code, @INC and @Foo::INC reference the same memory. $Really::Long::Package::Name::var and $P::var do as well.

To be strict-compliant, you'll need to quote any packages on the left-hand side of a => if the namespace has colons. Packages on the right-hand side all have to be quoted. This is documented as "Comma Operator" in perlop.

Chip Salzenberg says that it's not technically feasible to perform runtime namespace aliasing. At compile time, Perl grabs pointers to functions and global vars. Those pointers aren't updated if we alias the namespace at runtime.

GLOBALS

Package::Alias won't, by default, alias over a namespace if it's already in use. That's not considered a fatal error - you'll just get a warning and flow will continue. You can change that cowardly behaviour this way:

  # Make Bar like Foo, even if Bar is already in use.

  BEGIN { $Package::Alias::BRAVE = 1 }

  use Package::Alias Bar => 'Foo';

AUTHOR

Joshua Keroes <skunkworks@eli.net>

SEE ALSO

Devel::Symdump