gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:16:49 25 4
gpt4 key购买 nike

我已阅读 perldoc on modules ,但我没有看到关于命名包的建议,这样它就不会与内置或 CPAN 模块/包名称冲突。

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

package Company::Session;

...和 ​​Session.pm 将在目录 Company/中找到。

但我只是不喜欢这种命名约定。我宁愿将包层次结构命名为更接近代码功能的名称。但这通常是在 CPAN 上完成的......

我觉得我错过了一些基本的东西。我还查看了 Damian 的 Perl 最佳实践,但我可能没有找对地方......

关于以正确的方式避免包命名空间冲突有什么建议吗?

更新相关问题:如果存在包名称冲突,Perl 如何选择使用哪个包名称?谢谢大家。

最佳答案

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

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

以您的公司命名模块也可以。 (好吧,除非您为一些听起来很普通的公司工作。)使用反向域名可能有点矫枉过正,除非您打算将您的模块分发给其他人。 (但在这种情况下,您可能应该注册一个普通的模块名称。)

Perl 如何解决冲突:

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

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

顺便说一句,乐可以handle multiple modules with the same name by different authors ,甚至在一个程序中使用多个。这是一个不同的解决方案。

关于perl - 如何为自定义 Perl 模块选择一个不与内置或 CPAN 包名称冲突的包名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/658955/

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