perl - 如何在 Perl 读取管道处理程序中扩展变量?

标签 perl unit-testing backticks

似乎反引号中的变量在传递给 readpipe 函数时没有扩展。如果我重写 readpipe 函数,我如何扩展变量?

BEGIN {
*CORE::GLOBAL::readpipe = sub {print "Run:@_\n"};
}

`ls /root`;
my $dir = "/var";
`ls $dir`;

运行这个给出:
Run:ls /root
Run:ls $dir

我正在尝试模拟我正在编写的测试代码的外部调用。如果某个地方有一个 CPAN 模块可以帮助解决所有这些问题,那也会有所帮助。

更新 :

我决定对我的问题使用一个非常丑陋的解决方法。事实证明,使用 readpipe()而不是反引号正确扩展变量。在运行我的测试之前,我使用了一个自动脚本清理器,它将所有反引号转换为 readpipe()在运行测试之前。

例如运行:
$ cat t.pl

BEGIN {
    *CORE::GLOBAL::readpipe = sub {print "Run:@_\n"};
}

`ls /root`;
my $dir = "/var";
`ls $dir`;
readpipe("ls $dir");

给出:
$ perl t.pl
Run:ls /root
Run:ls $dir
Run:ls /var

不过,我仍在寻找更清洁的解决方案。

最佳答案

这似乎是 Perl 中的一个错误。使用perlbug报告它。

关于perl - 如何在 Perl 读取管道处理程序中扩展变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11027832/

相关文章:

javascript - 如何从 JavaScript 中提取 YouTube 网址?

perl - 从 cpan 安装 Perl CGI 模块时出错

perl - 如何在 Perl 中比较两个对象而不将它们强制为相同类型?

c++ - 如何在用Boost MSM编写的状态机中直接达到任何状态

node.js - Node Mocha/Chai 单元测试 - 比较对象数组,无论顺序如何

c++ - 使用反引号时程序不输出

bash - 错误使用反引号执行?

Perl 的 'readdir' 函数结果顺序?

使用模拟的 Python 单元测试功能

哈希引用中的 Perl 反引号给出不同的结果