如何在Perl中的基类和子类之间共享变量?

Jon*_*han 2 perl inheritance class subclass exporter

我有这样一个基类:

package MyClass;

use vars qw/$ME list of vars/;
use Exporter;
@ISA = qw/Exporter/;
@EXPORT_OK = qw/ many variables & functions/;
%EXPORT_TAGS = (all => \@EXPORT_OK );

sub my_method {

}
sub other_methods etc {

}

--- more code---
Run Code Online (Sandbox Code Playgroud)

我想要子类MyClass,但只适用于一种方法.

package MySubclass;

use MyClass;
use vars qw/@ISA/;
@ISA = 'MyClass';

sub my_method {

--- new method

}
Run Code Online (Sandbox Code Playgroud)

我想把它称为MySubclass我原来的MyClass,并且仍然可以访问所有的变量和函数Exporter.但是我在Exporter从原始类获取变量时遇到问题MyClass,要正确导出.我需要Exporter在子类内再次运行吗?这似乎多余而且不清楚.

示例文件:

#!/usr/bin/perl

use MySubclass qw/$ME/;

-- rest of code
Run Code Online (Sandbox Code Playgroud)

但是当我尝试导入$ME变量时,我遇到了编译错误.有什么建议?

bri*_*foy 8

您应该通过方法访问所有内容.忘记传递变量.

您收到语法错误,因为您有语法错误:

 use MySubclass /$ME/; # syntax error - that's the match operator
Run Code Online (Sandbox Code Playgroud)

你想要一个清单:

 use MySubclass qw/$ME/;
Run Code Online (Sandbox Code Playgroud)

但是,不要这样做.通过方法提供对这些数据的访问.由于您将继承这些方法,因此您不需要(也不应该使用)Exporter:

 package MyClass;

 BEGIN {
 my $ME;
 sub get_me { $ME }
 sub set_me { $ME = shift }
 }
Run Code Online (Sandbox Code Playgroud)

现在您的子类只是:

 package MySubclass;
 use parent( MyClass );
 sub my_method { ... }
Run Code Online (Sandbox Code Playgroud)

如果您需要共享许多变量,有各种模块可以自动处理访问者详细信息.

  • 那么,回过头来解决你的问题吧.不要输入新代码.向我们展示真实的代码. (4认同)