如何导出Perl包中的所有subs?

Vil*_*e M 18 perl export function subroutine

我想将所有subs暴露给我的命名空间,而不必一次列出一个:

@EXPORT = qw( firstsub secondsub third sub etc );
Run Code Online (Sandbox Code Playgroud)

使用完全限定名称需要对现有代码进行大量更改,因此我宁愿不这样做.

有没有@EXPORT_ALL?

我认为文档说这是一个坏主意,但无论如何我还是想做,或者至少知道如何做.

为了回答Jon的原因:现在为了快速重构,我想将一堆sub转移到他们自己的包中,对现有脚本进行最少的麻烦和代码更改(这些子当前使用并经常重复).

而且,大多数情况下,我只是好奇.(因为看起来出口商似乎也可以将其作为标准功能,但到目前为止基于答案有点令人惊讶,但事实并非如此)

bri*_*foy 23

根本不要进行任何导出,也不要在库中声明包名.只需加载文件,require一切都将在当前包中.十分简单.

  • 我该如何"加载"文件? (3认同)

Mic*_*man 10

别.但是,如果你真的想...编写一个自定义import,遍历符号表并导出所有已命名的子例程.

# Export all subs in package. Not for use in production code!
sub import {
    no strict 'refs';

    my $caller = caller;

    while (my ($name, $symbol) = each %{__PACKAGE__ . '::'}) {
        next if      $name eq 'BEGIN';   # don't export BEGIN blocks
        next if      $name eq 'import';  # don't export this sub
        next unless *{$symbol}{CODE};    # export subs only

        my $imported = $caller . '::' . $name;
        *{ $imported } = \*{ $symbol };
    }
}
Run Code Online (Sandbox Code Playgroud)