【问题标题】:How can I call a subroutine declared in another package without prefixing the subroutine name with its package name?如何调用在另一个包中声明的子例程,而不在子例程名称前加上其包名?
【发布时间】:2012-09-20 13:48:09
【问题描述】:

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

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

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;

我肯定是个笨蛋,在这里遗漏了一些东西。有没有更清洁的方法来实现这一点?

【问题讨论】:

    标签: perl namespaces package subroutine


    【解决方案1】:

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

    use Package1 'subroutine1';
    

    为了告诉Exporter提供的import方法将你的符号导出到调用包中。

    【讨论】:

      【解决方案2】:

      改变

      use Package1;
      

      use Package1 qw( subroutine1 );
      

      或改变

      our @EXPORT_OK = qw( subroutine1 );
      

      our @EXPORT = qw( subroutine1 );
      

      我建议第一次更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 2018-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多