
Package::Alias - alias one namespace into another

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

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.

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';

Joshua Keroes <skunkworks@eli.net>
