在perl 5.8.8中模拟反向操作符

时间:2015-09-09 06:05:24

标签: perl perl5.8

我试图在perl版本5.8.8中模拟反引号运算符。根据我的理解,不可能在perl版本5.8.8中模拟它。但是在perl版本5.9之后,我可以使用

轻松模拟反引号运算符

*CORE::GLOBAL::readpipe = \&mock_readpipe

有没有办法在perl版本5.8.8中模拟反引号运算符。我能够模拟system(),但不能反击。

1 个答案:

答案 0 :(得分:1)

  

您可以覆盖system()和readpipe(),因为它们是第二类   (可覆盖的)关键字。在Perl 5.8中,你不能覆盖qx //或``,   即使他们使用与readpipe()相同的底层代码   因为它们是一流的(不可覆盖的)关键字。看到   perl源代码中的perl_keywords.pl和opcode.pl。为什么有些   关键字不可覆盖?主要原因是那些关键词是   用作进一步解析魔法的一部分,即它们不遵循   通常的函数调用样式解析。

     

好消息是将#29168更改为perl使得qx //可以覆盖。   万岁!这是在Perl 5.9.5中发布的,最终会成功   作为Perl 5.10.1的维护版本。当发生这种情况时,设置   * CORE :: GLOBAL :: readpipe将覆盖readpipe(),qx //和``。

阅读关于perlmonks的完整讨论:mocking or trapping system calls

另请查看IPC::System::Simple