为什么不可能创建一个实用的Perl到Python源代码转换器?

前端之家收集整理的这篇文章主要介绍了为什么不可能创建一个实用的Perl到Python源代码转换器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果存在一个自动将Perl代码转换为Python代码的程序,那么这将是很好的,使得生成的Python程序可以像原始代码一样可读和可维护,更不用说以相同的方式工作了.

最明显的解决方案是通过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编写好的转换器更加坚定.

解决方法

为了扩展这里的一些其他列表,这些是一些在python中可能非常笨拙的Perl构造(如果可能的话).

>动态范围(通过local关键字)
> typeglob操作(具有相同名称的多个变量)
>格式(它们都有自己的语法)
>关于可变变量的闭包
> pragma
> lvalue子例程(mysub()= 5;类型代码)
>源过滤器
> context(list vs scalar,以及调用代码可以使用wantarray检查它的方式)
>类型强制/动态类型
>任何使用字符串eval的程序

列表继续进行,有人可以尝试在所有类似的构造之间创建映射,但最终由于一个简单的原因将失败.

Perl无法进行静态解析. Perl代码中的定义(特别是BEGIN块中的定义)改变了编译器解释剩余代码的方式.因此,对于非平凡的程序,从Perl转换=> Python受制于暂停问题.

在程序运行完成之前,没有办法确切知道所有程序的编译方式,理论上可以创建一个Perl程序,每次运行时都会编译不同的程序.这意味着一个Perl程序可以映射到无限数量的Python程序,只有在perl解释器中运行原始程序后才能知道它的正确性.

猜你在找的Perl相关文章