在我看来,您在这里混淆了两件事:面向对象和过程 Perl。Perl OO 有点“不同”(不是主流但可行)。
您的 TestBase.pm 模块似乎希望作为 Perl 对象(Perl oo 风格)运行,但您的 Perl 脚本希望将其作为“普通”模块访问。Perl 不像 C++ 那样工作(正如您所意识到的),因此您必须以不同的方式构建代码。请参阅 Damian Conway 的书籍以获取解释(以及比我下面的更智能的代码)。
程序:
#! /usr/bin/perl
#The module to inherit from
package TestBase;
use strict;
use warnings;
use Exporter ();
our @ISA = qw (Exporter);
our @EXPORT = qw (tbSub);
#-------------------------------
sub tbSub
{
my ($parm) = @_;
print "\nTestBase: $parm\n";
}
1;
.
#! /usr/bin/perl
#The descendent class
use strict;
use warnings;
use TestBase;
sub main;
sub mySub;
#-------------------------------
#Entry point...
main();
#---code------------------------
sub main
{
mySub(1);
tbSub(2);
mySub(3);
}
#-------------------------------
sub mySub
{
my $parm = shift;
print "\nTester: $parm\n";
}
Perl 面向对象
#! /usr/bin/perl
#The base class to inherit from
package TestBase;
use strict;
use warnings;
#-------------------------------
sub new { my $s={ };
return bless $s;
}
sub tbSub
{
my ($self,$parm) = @_;
print "\nTestBase: $parm\n";
}
1;
.
#! /usr/bin/perl
#The descendent class
use strict;
use warnings;
use TestBase;
sub main;
sub mySub;
#-------------------------------
#Entry point...
main();
#---code------------------------
sub main
{
my $tb = TestBase->new();
mySub(1);
$tb->tbSub(2);
mySub(3);
}
#-------------------------------
sub mySub
{
my $parm = shift;
print "\nTester: $parm\n";
}