首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C程序执行Perl脚本

从C程序执行Perl脚本
EN

Stack Overflow用户
提问于 2011-03-07 23:59:37
回答 2查看 6.6K关注 0票数 5

我目前有一个用C编写的程序,我有兴趣在其中集成一个相当长的Perl脚本,其他人编写的这个脚本可以完成类似的功能,但以不同的方式完成。我对手工将整个Perl脚本转换成C不感兴趣。

在我看来,有几种不同的选择:

  1. 因为脚本使用stdin和stdout进行通信,我知道我可以使用系统调用,例如system("perl script.pl")和管道输入和输出,但是我觉得这个解决方案不是可移植的,而且感觉不太优雅。
  2. 为了处理脚本,我可以将Perl解释器嵌入到我的程序中,但是,我觉得这可能会很大,而且对于执行一个不改变的脚本来说也太过分了。这确实提供了这样的优势,即我可以直接调用Perl子程序,而不是调用输入和输出。
  3. 我可以使用某种Perl到c++转换工具(如perlcc)在编译时将Perl源代码编译成C源代码,然后将其包含到我的程序的其余部分中。虽然乍一看,我认为这是最好的选择,但在Perl社区(或者至少google向我展示的部分),进行这种翻译并不是一个非常好的主意(这可能只是为了速度考虑,这对我来说根本不是问题)。这也(可能?)请允许我从C代码中调用Perl子程序,这将是一个巨大的好处。
  4. 用手重写剧本。

因此,我的问题是:这些选项中哪一种(或者没有上述选项)是最优雅和便携的?我知道,从C程序内部调用这个Perl程序已经是一种杂乱无章的攻击,但最不麻烦的解决方案可能是最好的。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-08 03:16:14

解决办法:

  • 是麻木不仁但肯定可行的。您可能不想使用system()本身,因为您希望读取和写入可能来自pipe()调用的输出。IE,您将需要创建必要的套接字、叉,然后在子程序中执行perl脚本并读取父程序的输出。虽然这可能是较少的代码,但不一定比以下代码更容易纠正:
  • 嵌入perl:需要一些时间来设置,但是一旦设置好了,它实际上就很流畅了。我为Net-SNMP编写了一个完整的嵌入式perl系统,它的工作原理非常出色。一旦你建立了它,它是相当令人惊讶的是,它是如此少的努力,使它的启动和运行。话虽如此,这是相当可怕的代码。
  • 从理论上讲,perl- to -c可能不错,但我不希望它一直都能工作。如果你只需要这样做一次,也许值得一试。但是,您需要一个好的测试套件,以确保输出符合您的预期。
  • 手工重写脚本:老实说,这无疑是“最干净”的解决方案。如果脚本在未来不会改变,除非它是一项令人生畏的任务,否则这很可能是可行的,因为它实际上有那么大(你没说)。

上述每种方法都有其优缺点。这取决于你关心的是什么:

  • 经常这样做(即perl将不断更改):使用嵌入式perl
  • 最少的时间:那么这取决于脚本的大小。根据脚本的外观,1、2、3或4可能是最快的。如果是长的,那就跳过4号。如果它真的很短,就直接到4号。

最后,如果是我,我会选择嵌入或翻译,这取决于它是否会再次改变。

现在..。我为地质找矿编写了一个完整的系统,实际上我想将它转换为Qt,因为我认为它会更易于移植。我的正确选择是什么?翻译。但这需要很长时间,所以我还没有这么做。

票数 3
EN

Stack Overflow用户

发布于 2011-03-08 11:09:18

如果perl脚本不是很长,您可能应该用C重写它,而忘记perl。

否则,我会使用系统呼叫。如果要考虑可移植性,可以使用perlcc编译perl脚本,以便获得一个可完全可移植的exe文件,从而避免在您希望运行此程序的每台计算机上安装perl。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5226819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档