我想对使用反引号的Perl程序进行单元测试。有没有一种方法可以模拟反引号,以便它们可以执行与执行外部命令不同的操作?

Another question shows what I need,但在Ruby中。不幸的是,我不能选择在该项目中使用Ruby,也不想回避。

最佳答案

您可以*模拟内置的 readpipe 函数。当遇到反引号或qx表达式时,Perl将调用您的模拟函数。

BEGIN {
  *CORE::GLOBAL::readpipe = \&mock_readpipe
};

sub mock_readpipe {
  wantarray ? ("foo\n") : "foo\n";
}

print readpipe("ls -R");
print `ls -R`;
print qx(ls -R);
$ perl mock-readpipe.pl
foo
foo
foo

*-如果您有perl version 5.8.9或更高版本。

10-08 08:02