我想在Perl中创建一个模块。以下代码无法正常工作。我想创建一个字数统计模块,我想进一步重用它。任何人都可以帮我创建这个模块吗?这是我第一次尝试创建一个模块,所以请帮助我。
package My::count
use Exporter qw(import);
our @Export_ok = qw(line_count);
sub line_count {
my $line = @_;
return $line;
}
我将上述代码保存在count.pm
use My::count qw(line_count);
open INPUT, "<filename.txt";
$line++;
print line count is $line \n";
我将上述脚本保存在.pi
扩展名中。
当我在Ubuntu平台上运行时,此代码显示错误。请帮助我解决这个错误。
答案 0 :(得分:0)
Perl脚本以.pl
扩展名存储。正如您所说use My::count qw(line_count);
Perl尝试从@INC
变量中存储的目录中搜索模块。您可以使用-I
标志运行它以指定搜索自定义程序包的目录。有关详细信息,请参阅this问题。
答案 1 :(得分:0)
按照惯例,Perl包通常都有一个大写的首字母,因此My::count
如果你称之为package My::Count;
则更符合约定。通常,较低级的模块名称是为pragma保留的,例如严格的&#39;和#39;警告&#39;。因此,请继续将名称更改为My::Count
。
接下来,将模块保存在lib/My/Count.pm
之类的路径中。 lib
也符合惯例。
然后你必须告诉你的脚本在哪里找到包My::Count
。
我们假设您正在存储模块和可执行文件,如下所示:
~/project/lib/My/Count.pm
~/project/bin/count.pl
注意我还为可执行文件使用了.pl扩展名。这是另一个惯例。通常在类Unix系统上,人们完全省略.pl
扩展名。
最后,在count.pl
文件中,您需要告诉perl
在哪里找到该库。通常这样做是这样的:
#!/usr/bin/env perl
use strict;
use warnings;
use FindBin qw($Bin);
use lib "$Bin/../lib";
use My::Count 'line_count';
# The rest goes here...
正如您所看到的,我们正在使用FindBin
找到存储可执行文件的位置,然后告诉perl
它应该在{{1}中查找(在其他位置之内) }文件夹存储在可执行文件的相对位置。
当然,因为这是Perl,这不是唯一的方法。但这是一个常见的习语。
答案 2 :(得分:0)
您需要将count.pm
文件移动到名为My
的目录中。所以你有以下几点。
./count.pl
./My/count.pm