如何在Perl中使方法"最终"?

Бер*_*ров 6 perl final monkeypatching moose

我想知道是否有可能确保我所制作的类中的方法不会被猴子修补(Monkey patch).麋能实现吗?

考虑以下:

{
  package Foo;
  sub hello{print "HI"}
1;
}

package main;
sub Foo::hello {print "bye"}

Foo::hello()#bye
Run Code Online (Sandbox Code Playgroud)

Nik*_*sMM 5

经过快速的网络研究,我在Perlmonks上发现了线程,线程指出:

至于最终声明方法,我不确定在不做任何真正想做的事情来拦截符号表中所有添加内容的情况下如何做。(甚至可以做到吗?)。

我还认为这是不可能的。

使用Moose,您可以应用方法修饰符,这些修饰符允许您定义必须在调用函数之前运行的函数。我没有尝试过,但是也许你可以定义一个函数

before "hello" => sub{ # check if hello has been tampered with
                   }
Run Code Online (Sandbox Code Playgroud)

我不知道如何检查它,甚至不起作用,但似乎值得尝试!

但是我要补充一点,由于perl是一种解释语言,任何使用您的软件包的人都可以查看和编辑源代码,因此可以避免任何预防措施。