Es scheint mir, Sie vermischen hier zwei Dinge: Objektorientierte und Verfahrens Perl. Perl OO ist irgendwie "anders" (wie in nicht Mainstream aber praktikabel).
Ihr TestBase.pm-Modul scheint zu erwarten, dass es als Perl-Objekt (Perl oo-style) ausgeführt wird, aber Ihr Perl-Skript möchte als "normales" Modul darauf zugreifen. Perl funktioniert nicht so, wie C++ es tut (Sie haben es bemerkt), also müssten Sie Ihren Code anders konstruieren. Siehe Damian Conways Bücher für Erklärungen (und intelligenteren Code als meine unten).
Procedural:
#! /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 OO
#! /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";
}
Nein, es endet nicht so genannt - es wird die Vererbungshierarchie nachschlagen, so dass ein Sub in einem komplett anderen Paket aufgerufen werden kann. Ihre Beispiele sind keine gültige Syntax. (Ich weiß, was du versucht hast zu sagen, aber wie du gesagt hast, es wird jemanden verwirren, der so verwirrt ist wie das OP noch weiter.) –
Natürlich läuft es den Vererbungsbaum. Die Frage ist doch die Vererbung. Beachten Sie, dass das OP verwendet wird, um C++ Vererbung zu verwenden, also dachte ich, das wäre offensichtlich. – tsee