在CORE :: GLOBAL中哪些Perl内置函数不能被覆盖?

前端之家收集整理的这篇文章主要介绍了在CORE :: GLOBAL中哪些Perl内置函数不能被覆盖?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
perlsub文档的 Overriding Built-in Functions部分提供

There is a second method that is sometimes applicable when you wish to override a built-in everywhere,without regard to namespace boundaries. This is achieved by importing a sub into the special namespace CORE::GLOBAL::.

然后给出几个例子.但是最后呢

Finally,some built-ins (e.g. exists or grep) can’t be overridden.

什么是完整列表?

解决方法

toke.c中任何值为负的值都可以被覆盖;所有其他人可能不会.你可以看源码 here.

例如,我们来看看第10,396行的waitpid

case 'w':
      if (name[1] == 'a' &&
          name[2] == 'i' &&
          name[3] == 't' &&
          name[4] == 'p' &&
          name[5] == 'i' &&
          name[6] == 'd')
      {                                       /* waitpid    */
        return -KEY_waitpid;
      }

由于waitpid为负数,因此可能会被覆盖. grep怎么样?

case 'r':
          if (name[2] == 'e' &&
              name[3] == 'p')
          {                                   /* grep       */
            return KEY_grep;
          }

这是积极的,所以不能被覆盖.这意味着以下关键字不能被覆盖:

chop,defined,delete,do,dump,each,else,elsif,eval,exists,for,foreach,format,glob,goto,grep,if,keys,last,local,m,map,my,next,no,package,pop,pos,print,printf,prototype,push,q,qq,qw,qx,redo,return,s,scalar,shift,sort,splice,split,study,sub,tie,tied,tr,undef,unless,unshift,untie,until,use,while,y

原文链接:https://www.f2er.com/Perl/172544.html

猜你在找的Perl相关文章