【发布时间】:2017-10-07 17:37:49
【问题描述】:
我正在尝试使用Exporter perl 模块导出在我的自定义模块中编写的方法。下面是我的自定义模块ops.pm
use strict;
use warnings;
use Exporter;
package ops;
our @ISA= qw/Exporter/;
our @EXPORT=qw/add/;
our @EXPORT_OK=qw/mutliply/;
sub new
{
my $class=shift;
my $self={};
bless($self,$class);
return $self;
}
sub add
{
my $self=shift;
my $num1=shift;
my $num2=shift;
return $num1+$num2;
}
sub mutliply
{
my $self=shift;
my $num1=shift;
my $num2=shift;
return $num1*$num2;
}
1;
下面是使用ops.pm的脚本ops_export.pl
#!/usr/bin/perl
use strict;
use warnings;
use ops;
my $num=add(1,2);
print "$num\n";
当我执行上面的脚本时,我遇到了错误。
Undefined subroutine &main::add called at ops_export.pl line 8.
我不明白为什么我的脚本会签入 &main 包,即使我使用 @EXPORT 导出了 ops.pm 中的 add
我哪里错了?
【问题讨论】:
-
ops是 Perl 已经使用的编译指示:perldoc.perl.org/ops.html 使用不同的名称。 -
另请注意,所有小写名称仅用于编译指示。为您自己的模块使用驼峰式名称(如
Ops)。而且您已经混淆了面向对象的代码和常规函数。即使导入有效,您的代码也会失败,因为您正在调用函数之类的方法。在你打电话给add时,$self不见了。 -
您应该没有理由导出方法。只能通过该类的对象调用它们。
标签: perl perl-module