从CLI调用模块中的Perl函数

8dtrkrch  于 8个月前  发布在  Perl
关注(0)|答案(2)|浏览(94)

我想有一些函数,我可以在脚本中调用,但它可以从命令行有用。所以我创建了一个小模块,但我得到一个错误。
下面是一个简单的示例:
在当前目录中,我在文件Foo.pm

use strict;
use warnings;
package Foo;

sub get_string {
    return "foo+bar";                                                                                                                                                                
}

然后在命令行中执行以下操作:

$ perl -I. -MFoo::get_string

我得到:

Can't locate Foo/get_string.pm in @INC (you may need to install the
Foo::get_string module)

我做错了什么?

eyh26e7m

eyh26e7m1#

首先,更改Foo.pm以避免Foo.pm did not return a true value错误。在文件末尾添加1;

use strict;
use warnings;
package Foo;

sub get_string {
    return "foo+bar";                                                                                                                                                                
}

1;

接下来,-MFoo::get_string语法可能需要一个名为Foo::get_string的模块,但您的模块只是名为Foo
以下是我的工作:

$ perl -I. -MFoo -E 'say Foo::get_string'
foo+bar

请参考-M的perlrun。
如果你需要传递一个参数给sub:

$ perl -I. -MFoo -E 'say Foo::get_string(5)'
cygmwpex

cygmwpex2#

如果将此添加到Foo包中

use Exporter qw/ import /;
our @EXPORT_OK = qw/ get_string /;

然后你可以使用命名的sub:

$ perl -I. -MFoo=get_string -E 'say get_string'
foo+bar

perldoc perlrun-M
一点内置的语法糖意味着你也可以说**-mMO =foo,bar-MMO =foo,bar作为 *'-MMOqw(foo bar'的快捷方式。这避免了在导入符号时使用引号的需要。由-MMO =foo,bar生成的实际代码是use module split(/,/,q{foo,bar})

相关问题