为什么我不能覆盖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"; 您可以找出可以使用 >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 – 如果你的代码实际上覆盖了打印,你将会有一个无限循环. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |