使用它时将参数传递给perl包

时间:2015-06-05 12:44:59

标签: perl arguments packages

如何在使用包时传递一些参数,例如:

use Test::More tests => 21;   

我无法找到有关此专长的任何有价值的文件。传递这些论点是否有任何利弊?

3 个答案:

答案 0 :(得分:4)

use My::Module LIST做了两件事:1)require s My::Module; 2)调用My::Module->import(LIST)

因此,您可以编写模块的import例程来处理以您想要的方式传递的参数列表。如果你确实在编写一个面向对象的模块,而不是将任何内容导出到调用者的命名空间,那就更容易了。

这是一个毫无意义的例子:

package Ex;

use strict;
use warnings;

{
    my $hello = 'Hello';
    sub import {
        my $self = shift;
        my $lang = shift || 'English';
        if ($lang eq 'Turkish') {
            $hello = 'Merhaba';
        }
        else {
            $hello = 'Hello';
        }
        return;
    }

    sub say_hello {
        my $self = shift;
        my $name = shift;

        print "$hello $name!\n";
        return;
    }
}

__PACKAGE__;
__END__

使用它的脚本:

#!/usr/bin/env perl

use strict;
use warnings;

use Ex 'Turkish';
Ex->say_hello('Perl');

Ex->import;
Ex->say_hello('Perl');

输出:

$ ./imp.pl
Merhaba Perl!
Hello Perl!

答案 1 :(得分:2)

有些人可能会说它在某些情况下更具可读性,但实质上它与

相同
use Test::More qw(tests 21);

(胖{com} test自动引用=>,数字不需要引号。

答案 2 :(得分:0)

主要的缺点是你不能使用来自Exporter的默认import子程序,它只需要一个符号列表(或表示符号集合的标签)导入到调用包中< / p>

Test::More从超类Test::Builder::Module继承自定义import例程,该例程使用use语句中提供的参数来配置测试计划。它还使用Exporter来处理指定的选项,如import => [qw/ symbols to import /]

如果你有一个特定的要求,几乎任何东西都可以通过自定义的import子程序完成,但是偏离标准的面向对象语义可能是不明智的