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

前端之家收集整理的这篇文章主要介绍了为什么我不能覆盖Perl的内置打印?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
this example后,

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

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

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

为什么?

解决方法

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

您可以找出可以使用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 – 如果你的代码实际上覆盖了打印,你将会有一个无限循环.

猜你在找的Perl相关文章