首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Perl中重命名导出的函数?

如何在Perl中重命名导出的函数?
EN

Stack Overflow用户
提问于 2009-04-29 11:36:03
回答 2查看 1.4K关注 0票数 2

我有一些导出各种函数的Perl模块。(我们已经有几年没有在新模块中使用@EXPORT了,但为了与旧脚本兼容,我们保留了它。)

我已经重命名了许多函数和方法,以更改为一致的命名策略,并考虑添加如下所示的行列表

代码语言:javascript
复制
*directory_error      = *directoryError;

在模块的末尾,只需将旧名称作为新名称的别名。

这是可行的,除非导出旧名称,并且调用脚本调用具有非限定名称的函数:在这种情况下,它报告没有找到该子例程(在调用模块中)。

我猜想正在发生的事情是,导出器在别名尚未创建的时候开始准备列表;但我尝试将typeglob赋值放在BEGIN块中,但没有帮助。

我尝试过自动加载,但这当然不会使该名称在调用上下文中可用。当然,我可以编写一系列的包装器函数,但这太乏味了。我可以自动生成包装器函数,尽管我不确定如何生成。

有没有什么好的建议来处理这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-29 13:21:27

下面的方法对我很有效。这似乎就是你所描述的,你一定是在什么地方弄错了。

主脚本:

代码语言:javascript
复制
use strict;
use warnings;
use Bar;

baz();

模块:

代码语言:javascript
复制
package Bar;
use strict;
use warnings;

require Exporter;
our @ISA    = qw(Exporter);
our @EXPORT = qw(baz);

sub Baz { print "Baz() here\n" }

*baz = *Baz;

1;
票数 1
EN

Stack Overflow用户

发布于 2009-04-29 14:06:51

如果希望这两个名称都可见,则必须导出这两个名称。使用Michael Carman的答案作为基础,您需要

代码语言:javascript
复制
our @EXPORT = qw(Baz baz);

代码语言:javascript
复制
our @EXPORT    = qw(Baz);
our @EXPORT_OK = qw(baz);

如果您希望能够调用程序中的任何一个。仅仅因为它们指向相同的coderef并不意味着该coderef的所有名称都将被导出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/801949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档