gpt4 book ai didi

perl - 如何从 Perl 的模块中导出名为 'import' 的函数?

转载 作者:行者123 更新时间:2023-12-04 22:37:30 29 4
gpt4 key购买 nike

我编写了一个特殊的导入函数,它将在几个地方使用,我希望能够“使用 ImportRenamer;”在这些模块中并让他们使用从 ImportRenamer 获得的导入。我该怎么办?

编辑:换句话说:我如何在不运行的情况下导入“导入”?

最佳答案

更新

现在 OP 澄清了他的需求,这确实应该以类似于 Exported 所做的方式来完成,确切地说,通过 glob 分配将子引用注入(inject)调用者的命名空间。例子:

###############################################

package ImportRenamer;
use strict;
sub import_me {
print "I am a cool importer\n";
}

sub import {
my ($callpkg)=caller(0);
print "Setting ${callpkg}::import to ImportRenamer::import_me\n";
no strict "refs";
*{$callpkg."::import"} = \&ImportRenamer::import_me; # Work happens here!!!
use strict "refs";
}
1;

###############################################

package My;
use strict;
use ImportRenamer;
1;

###############################################

package My2;
use strict;
use ImportRenamer;
1;

###############################################

和测试:
> perl -e '{  package main; use My; use My2; 1;}'
Setting My::import to ImportRenamer::import_me
I am a cool importer
Setting My2::import to ImportRenamer::import_me
I am a cool importer

原始答案

除了调用导入方法“ import”之外,您不需要做任何特别的事情。 use已调用 import() ,见 perldoc use :
use Module LIST 

Imports some semantics into the current package from the named module, generally by aliasing certain subroutine or variable names into your package.

It is exactly equivalent to:


 BEGIN { require Module; Module->import( LIST ); }

关于perl - 如何从 Perl 的模块中导出名为 'import' 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3338205/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com