我试图在perl版本5.8.8中模拟反引号运算符。根据我的理解,不可能在perl版本5.8.8中模拟它。但是在perl版本5.9之后,我可以使用
轻松模拟反引号运算符 *CORE::GLOBAL::readpipe = \&mock_readpipe
有没有办法在perl版本5.8.8中模拟反引号运算符。我能够模拟system(),但不能反击。
答案 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。