如何命名perl模块,SomeModule vs Some :: Module

时间:2015-07-26 14:31:39

标签: perl perl-module

perl模块是否有任何首选命名约定?

例如,perl世界中更常见的做法是什么?SomeModuleSome::Module?也许有些情况下一种风格比另一种更好?

2 个答案:

答案 0 :(得分:5)

如果你看一下CPAN,你会发现,大体上,模块名称被组织成名称第一段的顶级类别,并且每个模块的类别中都有一个独特的名称。例如,前十个类别(按分配计数)是

Net
App
WWW
Test
Data
Catalyst
Acme
Text
Dist
HTML

名称的第二部分通常是在该类别的所有其他模块中识别它(例如HTML::TreeBuilder),或者作为大类别的细分(例如Net::FTP::*模块)< / p>

名称可能有第三个部分,它表示整个集合的组件模块(例如DBIx::Class::RelationshipDBIx::Class::ResultSet)或者是另一个从另一个模块中分类的模块(如HTML::TreeBuilder::XPath

很长时间以来,无法控制上传到CPAN的模块的名称,并且它的某些部分可能有点混乱。但是它确实表示一组已定义且不断增长的名称,您应该尝试使用自己的包标识符来避免这些名称。你的例子不太现实,但我可能只用SomeModule,因为在每对单词之间插入一对冒号肯定是的方式去< / p>

如果您有多个模块,您可以开始将它们一起收集到类别中,如果您使用顶级类别(如SiteCompany)避免与任何CPAN模块发生冲突,这将有所帮助你可以使用。示例可以是Site::Utils::MatricesSite::Utils::StringProcessing

一个主要规则是您的包名称应该在CamelCase中,因为所有小写名称都保留给Perl pragma

由于stevieb's解决方案已被删除,因此值得我重新发布指向brian d foy优秀On The Naming of Modules的链接,这会产生许多重点

答案 1 :(得分:3)

这取决于您是否打算将模块放在CPAN上。如果你把它放在CPAN上,你应该正在阅读perldoc perlmodstyle。但是,如果您只是私下使用模块,则最相关的一点是use lib 'my_module'; use Some::Module; 用于表示目录层次结构。例如:

::

这将在名为“Some”的文件夹中将名为“Module.pm”的模块加载到目录“my_module”中。

这不应与包名称混淆,包名称通常也使用::。对于包名称, { "show":[ { "season":[ { "episodes":[ { "questionEntry":{ "id":1, "info":{ "seasonNumber":1, "episodeNumber":5, "episodeName":"A Hero Sits Next Door" }, "questionItem":{ "theQuestion":"What is the name of the ringer hired by Mr. Weed?", "attachedElement":{ "type":1, "value":"" } }, "options":[ { "type":1, "value":"Johnson" }, { "type":1, "value":"Hideo" }, { "type":1, "value":"Guillermo" } ], "answer":{ "questionId":1, "answer":3 }, "metaTags":[ "Season 1", "Episode 5", "Trivia", "Arya Stark", "House Stark" ] } } ] } ] } ] } 通常用于指定概念层次结构或包之间的关系,例如类和子类。