对 perl IPC::Run 感到困惑

Posted

技术标签:

【中文标题】对 perl IPC::Run 感到困惑【英文标题】:Confused about perl IPC::Run 【发布时间】:2013-04-26 07:00:03 【问题描述】:

我正在尝试使用这样的代码:

run \@cmd, \$in, \$out, \$err;

IPC::Run 中所述。

当然,这抱怨未定义的变量。

那么我试试这个:

my $in;
my $out;
my $err;

run \@cmd, \$in, \$out, \$err;

print $in "Hello World";

但是在print 行我遇到了未定义引用的问题。

我在这里做错了什么吗?如果是这样,我需要修改什么?

【问题讨论】:

您没有检查run 是否成功。事实上,您似乎也没有实际传递命令。您想同时捕获STDOUTSTDERR 吗?这是一个相当模糊的问题。您应该扩展它以解释您实际想要实现的目标。 【参考方案1】:

IPC::Run 页面上的示例代码假设您已经在其他地方声明和设置了这些变量/描述符,因此为什么一旦设置它们,它就不再抱怨了。

当 $in 不是有效的文件句柄时打印到 $in 会引发该错误。您想要么只保留 print 语句中的文件句柄,要么打开要写入的文件的文件句柄,然后将其传递给 print。

有关这些功能的更多信息,请参阅打开和打印的文档页面:

http://perldoc.perl.org/functions/open.html

http://perldoc.perl.org/functions/print.html

此外,我强烈建议您在 perl 脚本中使用严格和警告(如果您还没有这样做的话),因为它会为您捕获许多错误。

正如LeoNerd 所提到的,如果您没有将数组@cmd 设置为包含要运行的命令数组,那么在运行调用中实际上不会执行任何操作。

如果您刚刚开始使用 Perl 并使用 CPAN 模块,我强烈建议您也开始使用 Data::Dumper(在核心 Perl 中,无需安装即可使用它,只需将 use Dumper; 与其他使用语句)打印出你的变量,作为调试代码的一种方式,以了解正在发生的事情。

【讨论】:

以上是关于对 perl IPC::Run 感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

对 Python 列表语法感到困惑

对JAVA界面感到困惑[重复]

对令牌感到困惑

对减少和箭头功能感到困惑[重复]

对 gprof 输出感到困惑——调用太多?

对反应模式/架构感到困惑