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

ard*_*new 2 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;
Run Code Online (Sandbox Code Playgroud)

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

use strict;
use warnings;

use Package1;

&Package1::subroutine1;
Run Code Online (Sandbox Code Playgroud)

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

*s1 = \&Package1::subroutine1;
&s1;
Run Code Online (Sandbox Code Playgroud)

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

ike*_*ami 5

更改

use Package1;
Run Code Online (Sandbox Code Playgroud)

use Package1 qw( subroutine1 );
Run Code Online (Sandbox Code Playgroud)

或改变

our @EXPORT_OK = qw( subroutine1 );
Run Code Online (Sandbox Code Playgroud)

our @EXPORT = qw( subroutine1 );
Run Code Online (Sandbox Code Playgroud)

我建议第一次改变.