我在我的主程序中定义了多个类。一个是父类。另一个是儿童班:
# Main Program
...
package Foo; #Parent class
....
sub glob2regex {
my $glob = shift;
...here be dragons...
return $regex;
};
....
package Foo::Bar; #Child Class
base qw(Foo);
sub some_method {
my $self = shift;
my $regex = shift;
my $type = shift;
if ( $type eq "glob" ) {
$regex = glob2regex($regex); #ERROR: glob2regex is not defined.
}
...
}
我的父类中有一个名为glob2regex
. 它不是真正的方法,因为它不对对象做任何事情。相反,它是我的子类可以使用的辅助函数。
但是,如上所示在我的子类中调用它是行不通的,因为它没有在我的子类中定义。我可以在其前面加上完整的父类名称(即,将其称为Foo::glob2regex
而不是仅glob2regex
),或者我可以将其修改为一个对象,并将其称为$self->glob2regex
. 也许有一种更好的方法来处理我忽略的这种情况。
使父类中定义的此类函数在子类中可用的最佳方法是什么?
--
测试程序
#! /usr/bin/env perl
#
use strict;
use warnings;
use feature qw(say);
use utf8;
########################################################################
# MAIN PROGRAM
my $bar = Foo::Bar->new;
$bar->just_foo_it;
#
########################################################################
########################################################################
#
package Foo;
sub lets_foo_it {
say "I've done foo!";
}
#
########################################################################
########################################################################
#
package Foo::Bar;
use base qw(Foo);
*Foo::Bar::lets_foo_it = *Foo::lets_foo_it;
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
sub just_foo_it {
my $self = shift;
lets_foo_it();
}
#
########################################################################