对perl IPC :: Run感到困惑

时间:2013-04-26 07:00:03

标签: perl ipc

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

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

IPC::Run中所述。

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

那么我试试这个:

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

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

print $in "Hello World";

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

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

1 个答案:

答案 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;放在首位您的其他使用声明)打印出您的变量,作为调试代码的方式,以便了解正在发生的事情。