多个Perl包在一个文件中?

时间:2016-08-18 15:56:25

标签: perl module packages perl-module

请列举支持以下说法的所有理由:"每个Perl包应放在一个单独的文件中(一个文件中没有多个包)"。

例如,我有一个这样的代码:

{
package Classes::City;
# ...
}
{
package Classes::Cities; # for lists of multiple cities
# ...
}

我应该将此代码重构为两个单独的.pm文件吗? (将此问题视为上述问题的一个示例,而非作为基于意见的补充问题。我只想要列表参数,而不是基于意见的答案。)

2 个答案:

答案 0 :(得分:4)

主要原因是,当您使用包名称userequire时,Perl会自动为您加载模块。它通过将包名称转换为文件系统中的路径并检查该文件的每个@INC目录来实现。

use Classes::City;
# will be converted to on Linux:
Classes/City.pm

如果在一个文件中同时包含Classes :: City和Classes :: Cities,则无法在不加载City的情况下加载:: Cities,因为@INC中的文件Classes / Cities.pm不存在。< / p>

use Classes::City
# blows up

您现在需要跟踪哪些包在哪个文件中。这会让你的生活更加艰难。

答案 1 :(得分:0)

一个答案是,这不是预期的使用模型,编译器/解释器将以并不总是显而易见的方式与您抗争。

您的示例与我尝试执行的操作非常相似:创建一个类,然后在同一文件中为原始类创建一个容器类。

我发现十分之八的情况下,我可以轻松工作。

如果原始类包含用于(例如)访问器的BEGIN块,则在您尝试在容器类中使用访问器之前,并不总是清楚它们已被执行。我敢肯定,可以通过组合旋转来实现此目的,但是到那时,只使用1个包/文件模型似乎更干净。

即使从容器类中强制使用BEGIN { import class;}也不总是足以使事情按必要的顺序运行。