最明显的解决方案是通过Python utils调用perl:
#!/usr/bin/python os.exec("tail -n -2 "+__file__+" | perl -") ...the rest of file is the original perl program...
但是,结果代码几乎不是Python代码,它本质上是一个Perl代码.潜在的转换器应该将Perl构造和习语转换为易于阅读的Python代码,它应该保留变量和子例程名称(即结果不应该看起来模糊)并且不应该过多地破坏wrokflow.
这样的转换显然非常困难.转换的硬度取决于Perl特性和语法结构的数量,这些特征和语法结构没有易于阅读,未经过混淆的Python等价物.我相信大量的这样的特征使得这种自动转换实际上是不可能的(理论上存在可能性).
那么,您能否将Perl惯用语和语法功能命名为Python中不能像原始Perl代码那样简洁?
编辑:有些人将Python-to-Perl召集人联系起来,并在此基础上推断出,编写Perl-to-Python也应该很容易.但是,我确信转换为Python的需求更大;仍然没有写这个转换器 – 而反过来已经!这让我对不可能为Python编写好的转换器更加坚定.
解决方法
>动态范围(通过local关键字)
> typeglob操作(具有相同名称的多个变量)
>格式(它们都有自己的语法)
>关于可变变量的闭包
> pragma
> lvalue子例程(mysub()= 5;类型代码)
>源过滤器
> context(list vs scalar,以及调用代码可以使用wantarray检查它的方式)
>类型强制/动态类型
>任何使用字符串eval的程序
列表继续进行,有人可以尝试在所有类似的构造之间创建映射,但最终由于一个简单的原因将失败.
Perl无法进行静态解析. Perl代码中的定义(特别是BEGIN块中的定义)改变了编译器解释剩余代码的方式.因此,对于非平凡的程序,从Perl转换=> Python受制于暂停问题.
在程序运行完成之前,没有办法确切知道所有程序的编译方式,理论上可以创建一个Perl程序,每次运行时都会编译不同的程序.这意味着一个Perl程序可以映射到无限数量的Python程序,只有在perl解释器中运行原始程序后才能知道它的正确性.