与 Perl 代码的自动交互

Posted

技术标签:

【中文标题】与 Perl 代码的自动交互【英文标题】:Automatic interaction with Perl code 【发布时间】:2010-11-25 00:36:20 【问题描述】:

我想知道是否有任何方法可以自动与 Perl 5 代码交互,而无需创建显式 API 并通过某种协议发布它。我不想将这个问题限制在实现这一目标的任何特定方式上——我正在寻找任何想法。

例如,可以通过 JRuby 从基于 JVM 的语言访问 Ruby;本机编译的语言通常可以通过该平台的本机共享库/标准调用约定访问;其他人可以从代码中自动生成界面... Perl 有哪些选项?

【问题讨论】:

@Virator:我完全不确定这意味着什么。你的第一段没有映射到我大脑中任何已知的位置,第二段几乎同样神秘。你是在说 XS 还是什么? @tchrist:我想从其他语言访问一些遗留的 Perl 代码(我真的不想接触)。希望随着时间的推移逐步淘汰 Perl 部分。我正在寻找方法来做到这一点。 老实说,采用遗留 Perl 代码并通过在其周围编写一些小的包装器(从普通的旧管道数据传递到某些套接字通信到 ...)将其转换为 API 听起来比尝试容易得多在本机级别合并 Perl 和非 Perl 代码。 YMMV :) @DVK:这绝对是一个选择。我只需要测试两种方式,看看哪些更容易使用(以及哪些需要更少的 perl 重写)。 【参考方案1】:

作为一种选择,您可以嵌入 Perl 解释器,如图所示 here 或 here 或 here

【讨论】:

按照这个想法,我也发现了pyperl search.cpan.org/~gaas/pyperl-1.0/perlmodule.pod - 在 python 中轻松嵌入 perl。【参考方案2】:

有一个用于将 Perl 嵌入到您的程序中的库(请参阅 perlembed.pod),它是自动编译的 - 任何语言都可以使用它,Python 的 pyperl,php 的 PEAR“Perl”扩展,从 Perl 6 使用 Perl 5 的几次尝试,多次尝试从 JVM 运行 Perl(均未完成),Perl.NET。

您也可以采用其他方式,在 Perl 中嵌入其他语言的程序,然后从其他语言的程序中调用 Perl subs。主 Perl 程序将只包括用其他语言调用您的程序。有大量集成其他语言的 CPAN 模块。

【讨论】:

我可以看到很多这样的项目,但有时很难看出哪些是“概念证明”类型,哪些是已发布的严肃项目,因为它们实际上在某个地方使用并维护(其中是我要找的:)) perlembed.pod 是我回答中的第一个链接,仅供参考:)(您的回答提供了很好的细节,所以我很高兴您提供了它)

以上是关于与 Perl 代码的自动交互的主要内容,如果未能解决你的问题,请参考以下文章

如何自动化ssh登录,其中perl脚本用户需要2个密码

如何通过 Perl 以编程方式控制交互式 Unix 应用程序?

使用 Perl 和 OpenSSH 与 Switch 交互

Linux云计算运维学习之Expect概念

Perl CGI 日期和时间选择器,自动填充当前日期和时间

Shell脚本——与Linux Shell自动交互