对 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
是否成功。事实上,您似乎也没有实际传递命令。您想同时捕获STDOUT
和STDERR
吗?这是一个相当模糊的问题。您应该扩展它以解释您实际想要实现的目标。
【参考方案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 感到困惑的主要内容,如果未能解决你的问题,请参考以下文章