perl - 检查参数到 "use",然后传递其余的?

标签 perl module oop

我有一个 Perl 模块,我希望能够挑选出我的模块的用户在“使用”调用中传递的参数。无论我不认识的我想传递。我试图通过覆盖“导入”方法来做到这一点,但我运气不佳。

编辑:

为了澄清,我可以像这样使用我的模块:

use MyModule qw/foo bar/;

这将导入 酒吧 的方法我的模块 .但我想说:
use MyModule qw/foo doSpecialStuff bar/;

并寻找 doSpecialStuff 检查我是否需要在程序开始时做一些特殊的事情,然后将 qw/foo bar/传递给 Exporter 的 进口

最佳答案

通常,您会这样做以获得Exporter的 import() 功能(这不是唯一的方法,但它是一种常用的方法):

package MyClass;
use strict;
use warnings;
use Exporter 'import';  # gives you Exporter's import() method directly
our @EXPORT_OK = qw(stuff more_stuff even_more_stuff);

...然后你会得到一个 import()自动为您创建的方法。但是,如果您想在 import() 中做一些额外的事情在普通方法获取参数之前,不要导入Exporter的import() ,并定义您自己的,它调用 Exporter 的 import()在对您需要的参数列表进行任何更改后:
package MyClass;
use strict;
use warnings;
use parent 'Exporter';

sub import
{
    my ($class, @symbols) = @_;

    # do something with @symbols, as appropriate for your application
    # ...code here left as an exercise for the reader :)

    # now call Exporter's import, and import to the right level
    local $Exporter::ExportLevel = 1;
    $class->SUPER::import(@symbols);
}

但是,我想知道为什么你需要这样做......当被传递一个无法识别的符号时死亡的标准行为通常是一件好事。为什么要忽略无法识别的符号? ( 编辑: 我现在看到了,你想在导入符号的基础上指定额外的行为,这在 Perl 中并不少见。所以定义你自己的 import() 方法绝对是这里的方法,捕获这些值。)


PS。如果您只想导入由@EXPORT_OK 定义的符号,可以这样实现:
@symbols = grep {
    my $sym = $_;
    grep { $_ eq $sym } @EXPORT_OK
} @symbols;

关于perl - 检查参数到 "use",然后传递其余的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2404787/

相关文章:

javascript - 如何卸载 angularjs 模块

module - TypeScript 内部模块使用

Python 设计指南 :

c# - 抽象基类强制每个派生类都是单例

Perl 哈希、数组和引用

perl - 那么<FILE>到底是做什么的呢?

regex - 何时使用相等运算符而不是绑定(bind)运算符

android - 在钛中,是否可以从 android 模块访问 3rd-party-jar-bundled 资源文件( xml )?

perl - 如何在 Perl 中使用 "s"作为替换分隔符?

c++ - 在 C++ 中,如何从 B 类访问 Class 中的多维数组?