Perl 我是否应该将utilities.pl更改为utilities.pm模块?
在我们的产品中,我们在许多文件的开头都有一个大的实用程序文件(带有Perl 我是否应该将utilities.pl更改为utilities.pm模块?,perl,perl-module,Perl,Perl Module,在我们的产品中,我们在许多文件的开头都有一个大的实用程序文件(带有do)。有没有理由不把它变成一个模块?例如,不要这样做: do '../dbi_utilities.pl'; our ($db,$user,$pw,$attr); my $Data = DBI->connect($db,$user,$pw,$attr) or die "Could not connect to database: $DBI::errstr"; 我就不能这么做吗 use AppUtil; my $Data =
do
)。有没有理由不把它变成一个模块?例如,不要这样做:
do '../dbi_utilities.pl';
our ($db,$user,$pw,$attr);
my $Data = DBI->connect($db,$user,$pw,$attr) or die "Could not connect to database: $DBI::errstr";
我就不能这么做吗
use AppUtil;
my $Data = AppUtil->connect();
用它制作一个模块将使它更加健壮。现在很多事情非正式地相互依赖,但这些依赖性并不是很明显 此外,它还允许您仅导入部分实用程序。使用do(),您每次都在加载和编译utilities.pl文件,如果您多次执行()操作,可能会导致问题。另外,
use
是在编译时完成的,这将允许您的程序更快地失败,甚至可以使用perl-wc
进行测试
最后,将它保存在一个包中可以保护它的名称空间,这在项目增长时会很有帮助
我强烈建议您将utilites.pl转换成一个合适的Perl包,该包中加载了
使用您可以获得所有很酷的模块内容、封装、模块特定的函数等等
但是请注意,在语法中使用use
。为AppUtil命名空间创建对象,并调用connect子例程。为您的实用程序
此外,你必须有1;在文件的末尾
坚持使用另一种方法意味着您不必更改任何代码,也不必在末尾添加1
所有“do”、“use”和“require”导入,但它们内部的作用域代码(命名子例程除外,因为它们无法隐藏)。不这样做的唯一原因是时间
也就是说,清理您的界面以及所有调用应用程序以使用新界面需要时间
当您开始使用适当的测试(“make test”或“../Build test”或只是“prove…”)并且能够在签入之前检查您的更改不会破坏任何内容时,您现在所花费的时间将远远超过弥补。所以,无论如何,转换。请注意,这不是免费获得的。通过适当的重构将代码转换为模块,您可以轻松地进行测试。我在为Perl杂志撰写的文章以及关于Perlmonks的文章中谈到了这一点
祝你好运,将某些东西制作成模块并不会神奇地为你提供任何功能。你必须正确地编码它。还请注意,do和require不会自动导入。@布赖恩:您的权利。由程序员编写功能代码。