我正在使用PAR :: Packer,这个问题出现在我的脑海里。 PAR :: Packer如何在Perl中工作?它实际上是编译 Perl脚本到.exe像g ++编译C ++ Sources到.exe还是像Python中的py2exe那样将解释器和脚本打包成.exe?
答案 0 :(得分:8)
要明确这一点:
像PAR::Packer
这样的工具不会“编译”您的Perl脚本。它们将perl解释器与源文件和任何所需的模块捆绑在一个大的可执行文件中。运行时,将提取原始来源并将其送入随附的perl。
这种方法运作得相当好,但不会提高速度(相反......)。 唯一的优势是您可以将程序作为单个(尽管非常大)文件分发,而不依赖。
有一个名为perlcc
的非常实验性的工具能够将一些Perl程序转换为C或Perl字节码序列化。正如the docs所说:
以这种方式生成的代码无法保证正常工作。整个codegen套件(包括perlcc)应该被视为非常实验。强烈建议不要用于生产目的。
这是因为Perl语言不支持静态编译。它需要能够在执行主要执行阶段的同一会话期间解析某些动态功能时执行代码。
还有其他商业工具,通常与PAR :: Packer属于同一类别(创建胖可执行文件)。
摘要:如果您想要一个可执行文件,请使用PAR :: Packer。如果你想要速度,内联一些C(或使用XS)。没有工具可以将所有Perl脚本编译为机器代码。
答案 1 :(得分:1)
我正在使用PAR :: Packer,这个问题出现在我的脑海里。怎么样 PAR :: Packer在Perl中工作吗?
它实际上是否编译了Perl 脚本到.exe像g ++编译C ++源到.exe
没有pp和perl2exe没有。 (虽然pp是免费的)。
但看起来像perlcc
或者它是否有效 像python中的py2exe包含解释器和脚本 一个.exe?
pp和perl2exe,是的
作为示例 - 看起来像在PAR Packer或Perl2exe中完成的事情的sendemail.exe 它将解释器打包到exe中。
你可以用7-zip打开sendemail.exe!那里有一些文件夹,但有一个文件夹无法真正看到它们。
我认为它是某种形式的自解压可执行文件,但是,它执行代码。
您可以使用进程监视器监视它,您可以看到。
或者使用,进程资源管理器,看看它是否使用了它创建的临时目录中的任何dll ..
它会创建一个临时目录,例如
C:\Users\user\AppData\Local\Temp\pdk-user
< --- Win7
或
C:\Documents and Settings\user\Local Settings\Temp\pdk-user
< - WinXP
它创建的临时目录包含一堆奇怪的命名DLL和一个名为perl58.dll的DLL,毫无疑问,perl解释器
我确信有一次我看到它有一个正常名称的dll。 SSLEAY32.DLL,有趣的是当我运行pl文件时,它使用了一个来自我的c:\ perl64目录的类似名称的dll。所以EXE看起来真的像是一个黑客。直接运行pl文件更可靠。
该目录中的DIR / s / b,显示 -
178c2b604baa8a7f1ebc80539f378bff.dll
1823e8f62785746fd29cf0b06c636600.dll
465d2954d90fe6225ea61b3907c91da8.dll
6145f78a34d5ced8200800f1455d578a <-- the directory with the perl58. dll
9c50b5816b0e35f047e41f5899721d46.dll
f4e2e0db77ed1e6572c2f490479cd815.dll
f72f556d99dfb6b0c3bb37f123e2ee96.dll
6145f78a34d5ced8200800f1455d578a\perl58.dll
没有正常命名的DLL显示除perl58.dll之外的其他文件(虽然我过去看过一个普通的DLL)。
如果您查看进程资源管理器,可以使用perl58.dll和其他正常命名的dll
来查看它如果你看一下PAR网站,一个页面描述了perl2exe
Perl2Exe是可以构建的商业命令行应用程序 来自perl源的独立可执行文件。它通过创建一个 包含
的可执行文件一个独立的perl解释器(能够移植perl 5.8.x) perl脚本和perl引用的所有perl模块 脚本。
pp - PAR Packager提供相同的功能,但是免费。
如果你看这里
http://www.perlmonks.org/?node_id=237943
...the perl2exe tool is not a way to hide your source code.
Now it's even come to the attention of the security community (reported in bugtraq, for example).
For details, see the report from net-security's page.
Please stop supporting perl2exe. Please use PAR for a complete installation package, or perlcc to simply compile the top-level program.
-- Randal L. Schwartz, Perl hacker
因此,PP和perl2exe将解释器组合到EXE中,你可以在7zip打开时得到一个关于EXE的非常有趣的东西!
perlcc正确编译。
它似乎没有维持一段时间http://www.perlmonks.org/?node_id=654568,人们说这是错误的,但是最近在2014年6月完成了一些工作http://www.yapcna.org/yn2014/talk/5603它的性能比解释的perl要好。 (与打包解释器的EXE不同,它通常比运行perl脚本慢)。