如何调用在另一个包中声明的子例程,而不在子例程名称前加上其包名?

时间:2012-09-28 16:38:21

标签: perl namespaces package subroutine

我不完全确定这是可能的,但我想简单地通过省略包名来缩短我在另一个包中声明的子例程的名称。

例如,我定义了一个模块:

package Package1;

use strict;
use warnings;

BEGIN 
{
  require Exporter;
  our @ISA = qw( Exporter );
  our @EXPORT_OK = qw( subroutine1 );
}

sub subroutine1
{
  print "Hello!$/";
}

return 1;

我定义了一个驱动程序应用程序:

use strict;
use warnings;

use Package1;

&Package1::subroutine1;

我似乎可以缩短对subroutine1的调用的唯一方法是制作如下别名:

*s1 = \&Package1::subroutine1;
&s1;

当然,我是一个doofus,在这里遗漏了一些东西..有没有更清洁的方法来实现这一目标?

2 个答案:

答案 0 :(得分:5)

更改

use Package1;

use Package1 qw( subroutine1 );

或更改

our @EXPORT_OK = qw( subroutine1 );

our @EXPORT = qw( subroutine1 );

我建议第一次更改。

答案 1 :(得分:1)

您已经在使用Exporter,这就是您实现这一目标的方法。您需要做的就是将驱动程序应用程序代码更改为

use Package1 'subroutine1';

告诉import提供的Exporter方法将您的符号导出到调用包。