加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么我不能覆盖Perl的内置打印?

发布时间:2020-12-15 21:59:28 所属栏目:大数据 来源:网络整理
导读:this example后, 我试图用我自己来覆盖打印: BEGIN {*CORE::GLOBAL::print = sub {print 1};}print 2; 但事实证明它不起作用,2仍然是打印而不是1. 为什么? 解决方法 因为它具有非常特殊的解析规则,无法通过正常功能复制,所以打印操作符不能被覆盖. print "
this example后,

我试图用我自己来覆盖打印:

BEGIN {*CORE::GLOBAL::print = sub {print 1};}
print 2;

但事实证明它不起作用,2仍然是打印而不是1.

为什么?

解决方法

因为它具有非常特殊的解析规则,无法通过正常功能复制,所以打印操作符不能被覆盖.
print "foon";
print { *STDOUT } "foon";

您可以找出可以使用prototype覆盖哪些操作符

>perl -E"say qq{$_: },defined(prototype(qq{CORE::$_})) ? 'yes' : 'no' for @ARGV" print map time chr
print: no
map: no
time: yes
chr: yes

PS – 如果你的代码实际上覆盖了打印,你将会有一个无限循环.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读