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转移到他们自己的包中,对现有脚本进行最少的麻烦和代码更改(这些子当前使用并经常重复).
而且,大多数情况下,我只是好奇.(因为看起来出口商似乎也可以将其作为标准功能,但到目前为止基于答案有点令人惊讶,但事实并非如此)
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)
| 归档时间: |
|
| 查看次数: |
18215 次 |
| 最近记录: |