如果我有一个非常长的包名,我可以通过在符号表中创建一个条目来为该包起别名:
BEGIN {
# Make "Alias" be an alias for "Some::Really::Long::Package";
*Alias:: = \*Some::Really::Long::Package::;
# Equivalent to:
# *main::Alias:: = \*Some::Really::Long::Package::;
}
这就是类似的东西Package::Alias
在内部为您所做的事情。但是,这很臭,因为它与main
包装一起弄脏了。如何使别名仅影响当前包,并且只能在包中使用别名?我尝试将别名定义更改为
*Short::Alias:: = \*Some::Really::Long::Package::;
但后来我必须使用Short::Alias->myMethod()
而不是仅仅使用Alias->myMethod()
.
use strict;
use warnings;
package Some::Really::Long::Package;
sub myMethod {
print "myMethod\n";
}
package Short;
BEGIN {
# Make "Alias" be an alias for "Some::Really::Long::Package";
*Short::Alias:: = \*Some::Really::Long::Package::;
}
# I want this to work
Alias->myMethod();
package main;
# I want this to not work
Alias->myMethod();
如果两者都和Alias->myMethod()
在Alias::myMethod()
包中工作Short
,而不是在main
.