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