4

您能否详细说明 Perl 中的覆盖功能。一些简单的例子会很好理解。

4

3 回答 3

5

perldoc CORE显示了一个简单示例,说明如何覆盖内置的hex函数。

   BEGIN {
       *CORE::GLOBAL::hex = sub { 1; };
   }

   print hex("0x50"),"\n";                     # prints 1
   print CORE::hex("0x50"),"\n";               # prints 80
于 2012-05-02T13:38:25.750 回答
4

http://perldoc.perl.org/perlsub.html#Overriding-Built-in-Functions

许多内置函数可能会被覆盖,尽管这应该只是偶尔尝试并且有充分的理由。通常,这可能由试图模拟非 Unix 系统上缺少的内置功能的包来完成。

覆盖只能通过在编译时从模块中导入名称来完成——普通的预先声明是不够的。但是,use subs pragma 让您实际上可以通过 import 语法预先声明 subs,然后这些名称可能会覆盖内置名称:

例子:

use subs 'chdir', 'chroot', 'chmod', 'chown';
chdir $somewhere;
sub chdir { ... }

注:以上内容均摘自以上链接

于 2012-05-02T13:40:07.717 回答
1

您可以使用Sub::Override,但我不知道它是否可以覆盖本机功能。

于 2012-05-02T13:33:45.587 回答