Perl中覆盖函数的示例

use*_*534 2 perl overriding

你能详细说明Perl中的覆盖功能吗?一些简单的例子很容易理解.

too*_*lic 5

perldoc CORE显示了如何覆盖内置十六进制函数的简单示例.

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

   print hex("0x50"),"\n";                     # prints 1
   print CORE::hex("0x50"),"\n";               # prints 80
Run Code Online (Sandbox Code Playgroud)


vol*_*ron 5

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

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

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

例子:

use subs 'chdir', 'chroot', 'chmod', 'chown';
chdir $somewhere;
sub chdir { ... }
Run Code Online (Sandbox Code Playgroud)

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