【问题标题】:Should I change my utilities.pl to a utilities.pm module?我应该将我的实用程序.pl 更改为实用程序.pm 模块吗?
【发布时间】:2008-10-08 20:15:16
【问题描述】:

在我们的产品中,我们在很多文件的开头都需要一个大的实用程序文件(带有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();

【问题讨论】:

    标签: perl perl-module


    【解决方案1】:

    不这样做的唯一原因是时间。

    也就是说,清理您的界面以及所有调用应用程序以使用新界面需要时间。

    当您开始使用适当的测试(“make test”或“./Build test”或只是“prove ...”)并能够检查在签入之前您的更改不会破坏任何内容。因此,请务必进行转换。请注意,这不是免费的收益。

    【讨论】:

      【解决方案2】:

      通过适当的重构将您的代码制作成一个模块,您可以轻松地进行测试。我在 The Perl Journal"Scripts as Modules" 文章以及 Perlmonks 上的 "How a Script Becomes a Module" 文章中谈到了这一点。

      祝你好运,

      【讨论】:

        【解决方案3】:

        使用do(),您每次都在加载和编译utilities.pl 文件,如果您多次do() 可能会导致问题。此外,use 在编译时完成,这将使您的程序更快地失败,甚至可以使用perl -wc 进行测试。

        最后,将它保存在一个包中可以保护它的命名空间,随着项目的发展,这会有所帮助。

        我强烈建议您将您的 utilites.pl 转换为一个适当的 Perl 包,该包加载了use

        【讨论】:

          【解决方案4】:

          用它制作一个模块将使它更加健壮。现在很多东西都非正式地相互依赖,但这些依赖关系并不是很明显。

          此外,它还可以让您仅导入部分实用程序。

          【讨论】:

            【解决方案5】:

            您可以获得所有很酷的模块内容、封装、模块特定功能等等。

            请注意,通过在您的语法中使用 use。为 AppUtil 命名空间创建一个对象,并调用 connect 子例程。为您的公用事业提供服务。

            你也必须有 1;在文件末尾。


            坚持使用另一种方法意味着您不必更改任何代码,您不必在末尾添加 1。

            所有“do”、“use”和“require”导入,但其中的范围代码(命名子例程除外,因为它们无法隐藏)。

            【讨论】:

            • 将某些东西放入模块中并不会神奇地为您提供任何功能。您必须正确编码。还要注意 do 和 require do not 自动导入。
            • @brian:你的权利。功能由程序员自己编写。
            猜你喜欢
            • 1970-01-01
            • 2015-01-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多