使用它时将参数传递给perl包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用它时将参数传递给perl包相关的知识,希望对你有一定的参考价值。
如何在使用包时传递一些参数,例如:
use Test::More tests => 21;
我无法找到有关此专长的任何有价值的文件。传递这些论点是否有任何利弊?
答案
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!
";
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!
另一答案
有些人可能会说它在某些情况下更具可读性,但实质上它与之相同
use Test::More qw(tests 21);
(test
由胖逗号=>
自动引用,数字不需要引用)。
另一答案
主要的缺点是你不能使用import
的默认Exporter
子程序,它只需要一个符号列表(或表示符号集合的标签)导入到调用包中
Test::More
从超类import
继承了一个自定义Test::Builder::Module
例程,该例程使用use
语句中提供的参数来配置测试计划。它还使用Exporter
来处理像import => [qw/ symbols to import /]
这样指定的选项
如果你有一个特定的要求,几乎任何东西都可以通过自定义的import
子程序来完成,但是偏离标准的面向对象语义可能是不明智的
以上是关于使用它时将参数传递给perl包的主要内容,如果未能解决你的问题,请参考以下文章