1

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

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

如 中所述IPC::Run

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

那么我试试这个:

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

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

print $in "Hello World";

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

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

4

1 回答 1

1

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;您的其他使用语句放在顶部)打印出来您的变量作为调试代码以了解正在发生的事情的一种方式。

于 2013-07-16T06:21:57.163 回答