Perl 6名称空间和模块系统

5 perl naming-conventions perl6

我对Perl和Perl 6相当陌生,而且我无法与Perl 6模块/命名空间/包系统相处。

我正在图书馆。说我公司的名字是MyCompany。图书馆就是“类别” Net。那么我的文件层次结构应该是什么样?应该是lib/MyCompany/Net/MyLibrary.pm吗?还是lib/Net/MyLibrary.pm?或者是其他东西?

另外,我应该将类定义包装成这样吗?

package MyCompany {
  class Net::MyLibrary { 
Run Code Online (Sandbox Code Playgroud)

Bor*_*din 2

答案是,这完全取决于你。对于模块的名称是否应包含您的公司名称或其类别名称,没有任何规则。你可以直接调用它MyLibrary,它会正常工作

如果您正在编写一大套库,或者您想适应现有的库结构,那么您需要建立该结构并遵循其规则

如果您担心名称与现有 CPAN 模块冲突,那么最好使用特殊前缀。您的公司名称即可,因此您的所有包裹都将以MyCompany::. 之后放置的内容是您的选择,但以某种方式对模块进行分类是有意义的

另一方面,如果您正在编写想要上传到 CPAN 且符合那里的方案的内容,那么您应该以 、 等开头您的Net::HTML::名称Math::

因此,假设您想要编写一个网络模块,以便在也可能使用 CPAN 中的某些模块的程序中使用。以 开头的名称MyCompany::将保护您免受与其他软件包的冲突。那么您可能想Net::保留自己的类别或网络模块。然后你会想要一个独特的名字MyCompany::Net::,比如MyModule,但我希望它更有表现力

那么你的包将在file 中MyCompany::Net::MyModule,源代码将在 file 中MyCompany/Net/MyModule.pm。请注意,所有段都应以大写字母开头