perl 我是否应该将www.example.com更改utilities.pl为utilities.pm模块?

bfnvny8b  于 2023-03-03  发布在  Perl
关注(0)|答案(5)|浏览(130)

在我们的产品中,我们需要一个很大的实用程序文件(使用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();
q3qa4bjr

q3qa4bjr1#

不这样做的唯一原因是时间。
也就是说,清理界面以及所有调用应用程序使用新界面都需要时间。
当你开始使用适当的测试(“make test”或“./Build test”或只是“prove...”),并且能够在签入之前检查你的更改不会破坏任何东西时,你现在所付出的代价将远远超过补偿。所以,无论如何,转换。只是要知道,这不是一个免费的收获。

sigwle7e

sigwle7e2#

通过适当的重构将代码转换为模块,可以简化测试,我在The Perl Journal上的"Scripts as Modules"文章以及Perlmonks上的"How a Script Becomes a Module"文章中都提到了这一点。
祝你好运

wb1gzix0

wb1gzix03#

使用do(),每次都要加载和编译utilities.pl文件,如果使用do()多次,可能会出现问题。此外,use是在编译时完成的,这将使程序更快失败,甚至可以使用perl -wc进行测试。
最后,将其保存在包中可以保护其名称空间,这在项目增长时会很有帮助。
我强烈建议将您的www.example.com转换utilites.pl为一个适当的Perl包,并加载use

sqxo8psd

sqxo8psd4#

用它制作一个模块会使它更加健壮,现在很多东西非正式地相互依赖,但这些依赖性并不是很明显。
此外,它还允许您仅导入部分实用程序。

cedebl8k

cedebl8k5#

您可以获得所有很酷的模块内容、封装、模块特定函数等等。
但是请注意,通过使用use和语法.为AppUtil命名空间创建一个对象,并为实用程序调用connect子例程.。
你也必须有1;在你档案的最后。
坚持使用另一种方法意味着你不必修改任何代码,你不必在末尾加1。
所有的“do”、“use”和“require”都可以导入,但它们内部的作用域代码除外(除了命名的子例程,因为它们不能隐藏)。

相关问题