我想替换子类中的父函数(Somefunc),所以当我调用Main过程时,它应该失败。

Perl中可能吗?

代码:

package Test;

use strict;
use warnings;

sub Main()
{
    SomeFunc() or die "Somefunc returned 0";
}

sub SomeFunc()
{
    return 1;
}

package Test2;

use strict;
use warnings;

our @ISA = ("Test");

sub SomeFunc()
{
    return 0;
}

package main;

Test2->Main();

最佳答案

当您调用Test2->Main()时,包名称将作为第一个参数传递给被调用的函数。您可以使用该参数来解决正确的功能。

sub Main
{
    my ($class) = @_;
    $class->SomeFunc() or die "Somefunc returned 0";
}

在此示例中,$class将为"Test2",因此您将调用Test2->SomeFunc()。更好的解决方案是使用实例(即bless将该对象存储在Test::new中,使用$self而不是$class)。甚至更好的方法是使用 Moose ,它解决了Perl中面向对象编程的许多问题。

10-01 11:24