我正在尝试使用这样的代码:
run \@cmd, \$in, \$out, \$err;
如 中所述IPC::Run
。
当然,这抱怨未定义的变量。
那么我试试这个:
my $in;
my $out;
my $err;
run \@cmd, \$in, \$out, \$err;
print $in "Hello World";
但是后来print
我遇到了未定义引用的问题。
我在这里做错了什么吗?如果是这样,我需要修改什么?
IPC::Run 页面上的示例代码假设您已经在其他地方声明和设置了这些变量/描述符,因此为什么一旦设置它们,它就不再抱怨了。
当它不是有效的文件句柄时打印到 $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;
您的其他使用语句放在顶部)打印出来您的变量作为调试代码以了解正在发生的事情的一种方式。