如何在使用包时传递一些参数,例如:
use Test::More tests => 21;
我无法找到有关此专长的任何有价值的文件。传递这些论点是否有任何利弊?
答案 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
子程序完成,但是偏离标准的面向对象语义可能是不明智的