【发布时间】:2011-07-10 18:06:25
【问题描述】:
我目前有一个我用 C 编写的程序,我有兴趣将一个相当冗长的 Perl 脚本集成到其中,该脚本是其他人编写的,它完成类似的功能,但以不同的方式完成。我对手动将整个 Perl 脚本翻译成 C 语言不感兴趣。
在我看来,有几种不同的选择:
- 因为脚本使用标准输入和标准输出进行通信,所以我知道我可以使用系统调用,例如
system("perl script.pl")和管道输入和输出,但我觉得这个解决方案不便携,感觉不是很优雅。 - 我可以将 Perl 解释器嵌入到我的程序中以处理脚本,但是,我觉得这可能会很笨重,并且对于执行不会更改的脚本来说可能会过大。这确实提供了一个优势,即我可以直接调用 Perl 子例程,而不是管道输入和输出。
- 我可以使用某种 perl-to-c 翻译工具(如
perlcc)在编译时将 Perl 源代码编译为 C 源代码,然后将其包含到我的程序的其余部分中。尽管乍一看我认为这将是最好的选择,但在 Perl 社区(或者至少是谷歌向我展示的其中一部分)似乎有一个广泛的共识,即进行这种翻译不是一个好主意(这个可能只是出于速度考虑,这对我来说根本不是问题)。这也(可能?)允许我从 C 代码中调用 Perl 子例程,这将是一个巨大的优势。 - 手动重写脚本。
所以我的问题是:这些选项中的哪一个(或以上都不是)最优雅和便携?我知道从 C 程序中调用这个 Perl 程序已经是一个混乱的 hack,但最不混乱的解决方案可能是最好的。
谢谢!
【问题讨论】:
-
把perl编译成C,相信perl可以帮你搞定。
-
我对此进行了调查,并且我很确定它曾经(通过 B::C 和 B::CC 模块),但由于它们存在错误和过时而放弃了支持。
-
可以。我相信其中一个模块只是嵌入了 Perl 解释器,然后编写了 Perl 代码对应的 C 代码。真正将 Perl 有意义地翻译成 C 的那个是非常不可靠的。