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

前端之家收集整理的这篇文章主要介绍了如何为不与内置或CPAN软件包名称冲突的自定义Perl模块选择软件包名称?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读 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,甚至在单个程序中使用多个。但是现在不能解决你的问题。

猜你在找的Perl相关文章