如何在Perl中运行外部程序?

时间:2009-10-07 10:37:41

标签: c perl

我想使用Perl脚本执行C程序。什么输入手动给C可执行文件,这些应该由我的程序给出..

让我们拿一个简单的程序,输入两个nos。并打印出它的总和。 这些值应由Perl脚本提供。

请指导我完成一些我可以达到同样目的的教程。

3 个答案:

答案 0 :(得分:5)

使用system功能:

system "my-c-program 1 2";

如果要在perl脚本中捕获C程序的输出,请使用反引号或qx// operator

my $output = `my-c-program 1 2`;

运行my-c-program 1 2并将标准输出捕获到新的$output变量中。

答案 1 :(得分:5)

好吧,如果你刚学习如何在Perl中运行外部程序 - 请帮个忙,忘掉``。

``的问题是你在其中执行带参数的字符串 - 所以必须对其进行解析。当用户提供参数时,这可能会导致问题。

如果您100%确定您可以完全控制参数和命令名称 - 您可以使用``,但对于任何其他情况 - 请考虑使用IPC::Run

它有点复杂,但它不需要任何参数解析的单一事实使得更好。此外,您可以完全控制已执行程序的stdin,stdout和stderr - 包括将回调附加到它们!

答案 2 :(得分:-1)

你可能正在使用反引号引用机制,它执行外部程序并将其stdout作为字符串返回。 例如

$date = `date`
print $date;

将在unix中打印类似“Wed Oct 7 12:50:33 CEST 2009”的内容。但是,出于安全目的,必须对参数进行shell转义,这在某些情况下可能会非常棘手 - 在大多数情况下,污染是很常见的。

我建议所有初学者直接进入'系统'命令,直到他们意识到反引号的安全隐患 - 如果是这种情况你应该接受@Dave Hinton的建议

对于高级魔术,您应该阅读perlipc perldoc