使用Return Subroutine的最佳方法 - Perl

时间:2016-03-18 07:50:59

标签: perl

我写了一个工作正常的脚本。但如果有的话,我正在寻找更好的选择:

这是我的逻辑: 来自Test.pl

use strict;
use warnings;

    executeTest();

        sub executeTest {

        my $score = abc::executexyz($z,$x,$y);
        }

来自abc.pm

    sub executexyz {

    #perform some operation
    my $check = getscore();
    return $check;
    }

    sub getscore {
    #perform some operation
    return $output;

    }

1;

1 个答案:

答案 0 :(得分:1)

设置软件包以便导出所选功能是常见的,也是可取的。然后,您将use packageName qw(f1 f2);添加到使用这些功能的单元中,他们可以在没有f1()的情况下说出f2()abc::。当你这样做时,可以看一下脚本的顶部,看看使用了什么包,以及它们的功能。还有许多其他好处。

档案abc.pm

package abc;

use warnings;
use strict;
use Carp;

use Exporter;
our (@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
@ISA = ('Exporter');
@EXPORT_OK = qw(executexyz do_more);

sub executexyz {
    #perform some operation
    my $check = getscore()  or carp "Error: ";
    return $check;
}

sub getscore {
    #perform some operation
    return $output;
}

sub do_more { }

1;

还有其他方法可以做到这一点。请搜索SO以获取包裹,你会发现很多。然后脚本(或其他包)可以use这个包,只导入他们需要的功能。

use warnings;
use strict;
use abc qw(executexyz);

executexyz();  # can use it without abc::

@EXPORT_OK = qw(...)使列出的函数可供其他代码用于通过use导入,因此可以在不指定abc::的情况下使用它们,而包中的其他函数则不能。这是导出符号的首选方式。

如果您要为@EXPORT添加类似的行,那么所有列出的函数都将被推入use此包的任何单元的命名空间中。这几乎不是一件好事。

%EXPORT_TAGS允许您通过仅询问标记名称来设置可导入的功能组。我添加它只是为了给你一个暗示,你可以用包管理做更多的事情。

这几乎没有开始这个话题。例如,请参阅perldoc的package页面以及更多perlmod页面。那里有书籍和许多教程。我的SO。

一旦你得到了软件包,下一个相关的东西就是查找类的编写方式。