在Perl中使用`use base`和@ISA有什么区别?

aid*_*dan 9 oop perl

我想创建一个扩展DBI的单例类.我应该做这样的事情:

use base 'Class::Singleton';
our @ISA = ('DBI');
Run Code Online (Sandbox Code Playgroud)

或这个:

our @ISA = ('Class::Singleton', 'DBI');
Run Code Online (Sandbox Code Playgroud)

或者是其他东西?

不确定'use base'和'isa'之间的区别是什么.

Cha*_*ens 8

典型的用途@ISA

package Foo;

require Bar;
our @ISA = qw/Bar/;
Run Code Online (Sandbox Code Playgroud)

baseparent编译指示都加载所请求的类和修改@ISA,包括它:

package Foo;

use base qw/Bar/;
Run Code Online (Sandbox Code Playgroud)

如果您想要多重继承,可以提供多个模块baseparent:

package Foo;

use parent qw/Bar Baz/; #@ISA is now ("Bar", "Baz");
Run Code Online (Sandbox Code Playgroud)

parent编译指示是Perl 5.10.1中的新增功能,但如果您使用的是旧版本的Perl,则可以从CPAN安装.它之所以被创造是因为base由于"积累在其中的残骸",这种实用主义变得难以维持.你不应该看到两者之间的基本用法有所不同.


Ala*_*avi 4

我认为你应该使用parentpragma 而不是base中建议的那样perldoc base