为条件OO模块加载编写包装器模块的正确方法是什么?

时间:2014-02-18 09:01:28

标签: perl oop portability perl-module overhead

我应该使用哪种方式?

package My_Module;

# way one
my $package = $^O eq 'MSWin32' ? 'My_Module::Win32' : 'My_Module::Linux';
sub new {
    my $class = shift;
    return $package->new( @_ );
}

# way two
use parent $^O eq 'MSWin32' ? 'My_Module::Win32' : 'My_Module::Linux';

2 个答案:

答案 0 :(得分:2)

就个人而言,我会选择第一种技术。创建一个有时从一个父级继承而有时从另一个父级继承的类对我来说似乎有点脏。肯定会工作,但它会使类分析工具(如Pod::Coverage::CountParents)混淆不清。

那就是说,我可能会将sub new重命名为new_by_platform。人们强烈期望My_Module->new将返回My_Module类型的对象。让它返回另一个类的对象可能会让人感到困惑。 (虽然如果My_Module::Win32My_Module::Linux继承自My_Module,那么将其命名为new似乎不那么糟糕了。)

答案 1 :(得分:0)

2 - 使用父母是更好的方法。

http://lo-f.at/glahn/2009/08/useBaseAnduseParent.html