perl – 如何覆盖Moose :: Role中的sub?

我正在尝试实现一个Moose :: Role类,其行为类似于 Java中的抽象类.我想在Role中实现一些方法,但是能够在具体类中覆盖这些方法.如果我尝试使用与扩展类时相同的样式,我会得到错误如果本地方法已经存在,则无法添加覆盖方法.这是一个例子:

我的抽象类:

package AbstractClass;

use Moose::Role;

sub my_ac_sub {

    my $self = shift;

    print "In AbstractClass!\n";
    return;
}

1;

我的具体课程:

package Class;

use Moose;

with 'AbstractClass';

override 'my_ac_sub' => sub {

    my $self = shift;

    super;
    print "In Class!\n";
    return;
};

__PACKAGE__->meta->make_immutable;
1;

然后:

use Class;

my $class = Class->new;
$class->my_ac_sub;

难道我做错了什么?我想要完成的是应该以不同的方式完成的吗?我不想做什么?

解决方法

结果我错误地使用它.我打开了 a ticket并且显示了这样做的正确方法:
package Class;

use Moose;

with 'AbstractClass';

around 'my_ac_sub' => sub {

    my $next = shift;
    my $self = shift;

    $self->$next();
    print "In Class!\n";
    return;
};

__PACKAGE__->meta->make_immutable;
1;

进行此更改具有所需的效果.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...