如何在perl中实现单例类?

pla*_*etp 7 perl singleton

在Perl中实现Singletons的最佳实践是什么?

Eug*_*ash 16

您可以使用Class :: Singleton模块.

"Singleton"类也可以使用任何一个mystate变量轻松实现(后者自Perl 5.10起可用).但请参阅下面的@ Michael的评论.

package MySingletonClass;
use strict;
use warnings;
use feature 'state';

sub new {
    my ($class) = @_;
    state $instance;

    if (! defined $instance) {
        $instance = bless {}, $class;
    }
    return $instance;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果模块是子类,则会失败; 实例变量需要存在于最终包中.Class :: Singleton得到了这个权利. (4认同)
  • 如果继承它,它实际上并没有"失败".继承的类只需要像任何其他类一样访问单例对象并与之交互.但是,这一切都取决于你想要做什么. (3认同)

dax*_*xim 9

如果你正在使用Moose,那么就是MooseX :: Singleton.它的接口与Class :: Singleton兼容.