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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用它时将参数传递给perl包相关的知识,希望对你有一定的参考价值。

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

use Test::More tests => 21;   

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

答案

use My::Module LIST做了两件事:1)它requires 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包的主要内容,如果未能解决你的问题,请参考以下文章

nodemon :作为必需模块使用时将参数传递给可执行文件

在运行时将参数传递给晶体报告不起作用

我可以在构建时将参数传递给angular-cli

异步初始化时将参数传递给python类

如何使用底部导航视图和 Android 导航组件将参数传递给片段?

如何将强制和可选命令行参数传递给 perl 脚本?