加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何为不与内置或CPAN软件包名称冲突的自定义Perl模块选择软件包

发布时间:2020-12-15 21:24:07 所属栏目:大数据 来源:网络整理
导读:我已经阅读 perldoc on modules,但我没有看到关于命名一个包的建议,所以它不会与内置或CPAN模块/包名称冲突。 在过去,为了开发本地Session.pm模块,我使用我公司的名称创建了一个本地目录,例如: package Company::Session; …和Session.pm将在目录Compa
我已经阅读 perldoc on modules,但我没有看到关于命名一个包的建议,所以它不会与内置或CPAN模块/包名称冲突。

在过去,为了开发本地Session.pm模块,我使用我公司的名称创建了一个本地目录,例如:

package Company::Session;

…和Session.pm将在目录Company /。

但我不是这个命名约定的粉丝。我宁愿命名包层次更接近代码的功能。但是这是怎么做的CPAN一般…

我觉得我缺少一些基本的东西。我也看过Damian的Perl最佳实践,但我可能没有在正确的地方看…

有关避免包名称空间冲突的正确方法的任何建议?

更新w /相关问题:如果有一个包名冲突,Perl如何选择使用哪一个?感谢大家。

解决方法

命名空间Local ::仅为此目的而保留。没有以该前缀开头的模块将被CPAN或核心接受。或者,您可以在顶级名称(如My_Corp :: Session或只是My_Session)中使用下划线。具有下划线的所有类别也已保留。 (这在 perlmodlib中提到,在“选择模块的名称”下)。

请注意,这两个预留仅适用于顶级名称。例如,有名为Time :: Local和Text :: CSV_XS的CPAN模块。但是Local :: Time和Text_CSV :: XS是保留名称,不会在CPAN上被接受。

命名模块后你的公司也很好。 (好吧,除非你为一些真正通用的sounding公司工作。)使用反向域名可能是过分,除非你打算将模块分发给他人。 (但在这种情况下,你应该注册一个正常的模块名称。)

Perl如何解决冲突:

Perl在@INC中搜索具有指定名称的模块的目录。找到的第一个模块是使用的模块。因此,@INC中的目录顺序决定了使用哪个模块(如果你在不同的位置安装了同名的模块)。

perl -V将报告@INC的内容(最高优先级的目录首先列出)。但是在运行时也有很多方法来操作@INC。

BTW,Perl 6将能够handle multiple modules with the same name by different authors,甚至在单个程序中使用多个。但是现在不能解决你的问题。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读