Given a list of name => value pairs, declares aliases
in the <A HREF="../../lib/Pod/perlfunc.html#item_caller"><CODE>caller</CODE></A>s namespace. If the value supplied is a reference, the
alias is created for the underlying value instead of the reference
itself (there is no need to use this module to alias references--they
are automatically ``aliased'' on assignment). This allows the user to
alias most of the basic types.
<P>If the value supplied is a scalar compile-time constant, the aliases
become read-only. Any attempt to write to them will fail with a run time
error.</P>
<P>Aliases can be dynamically scoped by pre-declaring the target variable as
<A HREF="../../lib/Pod/perlfunc.html#item_local"><CODE>local</CODE></A>. Using <A HREF="#item_attr"><CODE>attr</CODE></A> for this purpose is more convenient, and
Foo->new->easymeth; # this will not recurse endlessly</PRE>
<PRE>
# prints "6|7|8|b|9|"
print join '|', $foo, @bar, %buz, "\n";</PRE>
<PRE>
# this should fail at run-time
eval { Foo->new->privmeth };
print $@ if $@;</PRE>
<P>
<HR>
<H1><A NAME="notes">NOTES</A></H1>
<P>It is worth repeating that the aliases created by <A HREF="#item_alias"><CODE>alias</CODE></A> and <A HREF="#item_const"><CODE>const</CODE></A> will
be created in the <A HREF="../../lib/Pod/perlfunc.html#item_caller"><CODE>caller</CODE></A>s namespace (we can use the <CODE>AttrPrefix</CODE> option to
specify a different namespace for <A HREF="#item_attr"><CODE>attr</CODE></A>). If that namespace happens to be
<A HREF="../../lib/Pod/perlfunc.html#item_local"><CODE>local</CODE></A>ized, the aliases created will be local to that block. <A HREF="#item_attr"><CODE>attr</CODE></A>
localizes the aliases for us.</P>
<P>Remember that references will be available as their dereferenced types.</P>
<P>Aliases cannot be lexical, since, by neccessity, they live on the
symbol table.</P>
<P>Lexicals can be aliased. Note that this provides a means of reversing the
action of anonymous type generators <CODE>\</CODE>, <CODE>[]</CODE> and <CODE>{}</CODE>. This allows us
to anonymously construct data or code and give it a symbol-table presence
when we choose.</P>
<P>Any occurrence of <CODE>::</CODE> or <CODE>'</CODE> in names will be treated as package
qualifiers, and the value will be interned in that namespace.</P>
<P>Remember that aliases are very much like references, only we don't
have to dereference them as often. Which means we won't have to
pound on the dollars so much.</P>
<P>We can dynamically make subroutines and named closures with this scheme.</P>
<P>It is possible to alias packages, but that might be construed as
abuse.</P>
<P>Using this module will dramatically reduce noise characters in
object-oriented perl code.</P>
<P>
<HR>
<H1><A NAME="bugs">BUGS</A></H1>
<P><CODE>use strict 'vars';</CODE> is not very usable, since we <STRONG>depend</STRONG> so much
on the symbol table. You can declare the attributes with <CODE>use vars</CODE> to
avoid warnings. Setting <A HREF="#item_%24Alias%3A%3AAttrPrefix"><CODE>$Alias::AttrPrefix</CODE></A> to ``main::'' is one way
to avoid <CODE>use vars</CODE> and frustration.</P>
<P>Tied variables cannot be aliased properly, yet.</P>