如何在Perl中创建自己的模块

时间:2014-02-05 06:47:32

标签: perl module

模块

package ExampleModule;

use strict;
use base "Exporter";
our @export = qw/hello_world/;
sub hello_world
{
    print "Hello,world";
}
1

测试

 perl -c examplemodule.pm
    examplemodule.pm syntax OK

脚本:

use ExampleModule;
hello_world();
exit;

但我收到错误

错误: 无法在@INC中找到ExampleModule.pm(@INC包含:/ usr / local / lib64 / perl5 / usr / local / share / perl5 / usr / lib64 / perl5 / vendor_perl / usr / share / perl5 / vendor_perl / usr / lib64 / perl5 / usr / share / perl5。)at until.pl第229行。 BEGIN失败 - 汇编在until.pl第229行中止。

我的模块中有什么问题请告诉我

修改

package ExampleModule;

use strict;
use base "Exporter";
our @EXPORT = qw(hello_world);

sub hello_world {
    print "Hello,world";
}
1;

使用ExampleModule.pm保存

#!/usr/bin/perl -w
use strict;
use lib "/home/Admin/Desktop/Perl_Work_Space/ExampleModule.pm/";
use ExampleModule ;
hell_world();
exit;

使用first.pl保存

收到错误

[Admin@localhost Perl_Work_Space]$ perl first.pl 
Undefined subroutine &main::hell_world called at first.pl line 5.

2 个答案:

答案 0 :(得分:1)

您在@INC中缺少模块的路径。要修复它,你可以告诉perl在哪里寻找模块,

use lib "lib/";  # relative or absolute path to ExampleModule.pm
use ExampleModule;
hello_world();

同样ExampleModule.pm顶部应包含行,并使用但不继承Exporter模块,

package ExampleModule;

use strict;
use Exporter "import";
our @EXPORT = qw/hello_world/;

sub hello_world {
    print "Hello,world";
}
1;

答案 1 :(得分:1)

use lib ...;语句外,包名和文件名必须具有相同的拼写,包括大小写。因此,请将文件重命名为ExampleModule.pm

虽然我想知道为什么perl -c examplemodule.pm不会发出警告。

你必须使用our @EXPORT = qw/hello_world/;