Perl程序的打包和一个奇才
我大概是用Perl写程序的人里头很怪的一个。大部分人都是用Perl写网站程序,可是我是用它来开发应用程序。大部分人都不害怕暴露他们的Perl源代码,可是我得保护我的源代码。不管这听起来有多荒谬,事实就是如此。
为了保护Perl源代码,常用的有三种方法。
1. 使用Perl自带的perlcc工具。这个工具有一个最大的弱点:它只能作用于一个perl文件。假如你和我一样写了十几二十几个perl包,主程序里倒是空空如也,估计要郁闷死。用也是可以用的,就是要把所有的源代码copy到一个文件,取消所有的package定义,把原来不同package下面同名的函数改名,不同的package里面的同名全局变量也要改名。然后
$perlcc -o hello hello.pl
得到可执行程序hello. Perlcc的原理是把perl程序转换成C程序,然后用GNU C编译器编译。它在Windows上也可以用,但需要额外安装C编译器,比如Intel C或者MS Microsoft Visual C。由于perlcc把代码先变C再变可执行程序,反编译出来的源码很难看懂,所以安全性很高。但是把所有的代码写一个文件,模块也不能用了,这简直是从地铁时代回到乌蓬船时代,我想不会有人觉得舒服。何况这样混杂后的代码该如何维护升级和做版本控制呢,头大。另外,perlcc有申明,不保证它编译出来的东西能用(参见$perldoc perlcc)。我没遇到这个情况,而是遇到了perlcc直接就对我的程序编译不通过,没戏唱了。{2006.12.15更新:找到perl不能编译我的程序的原因了:1. 只能用use 不能用require,模块文件名的后缀都改成.pm, use后跟不带后缀的文件名就可以。2. 所有的全局数组,必须用my, our, 或者local来定义,不可以用缺省作用范围。第二点其实应该是perlcc的一个bug了,因为关联数组和简单变量都没有这个问题。}
2. perl2exe,据说很好用,但令人沮丧的是要license, 而且据说跨平台还有问题。
3. PAR(Perl Archive Toolkit)。这个命名法则是类似于JAR(Java Archive)。下载下来以后还要从CPAN上下载一些依赖性模块。CPAN模块果然好装,每个模块都是
$perl Makefile.PL
$make
$make install
就能装好。最后安装PAR。装好以后会在/usr/bin/下面添加一些工具。我不关心别的,就要用pp:
$pp -o hello hello.pl
这样生成的hello就是可执行文件,而且把用到的perl模块文件也全打包进来了。运行的时候它会在/tmp/par-username/下生成一个叫cache-123456789之类的临时文件夹,打开看看可以发现就是自己的源代码。这样不是没达到我想要的隐藏源代码的目的么?原来还需要启动过滤器:
$pp -f Bleach -o hello hello.pl
或者
$pp -f Bytecode -o hello hello.pl
前面的Bleach过滤器是PAR自己实现的,而Bytecode这种过滤方式是Perl的标准格式(需要Perl 5.8.1以上版本支持)。过滤之后,临时文件夹里面的文件就不是简单可读了。当然是有办法crack, 但这和恢复带初始变量名的源代码是两回事。
* * * * * *
PAR这个工具很好用,出于景仰之情我看了一下作者,是一个叫Audrey Tang的人。看起来是一个华人,而且还是女性,在软件世界里很少见。于是我多事google了一下。原来她1981年出生,在Perl世界里却是个鼎鼎有名的人物,她在CPAN上维护的模块数量一直排名前列;此外还是有名的hacker。据说她初中就退学,能讲流利的汉语普通话和英文,做软件完全是靠自学成才。所有在网上找到对她的评价往往都是“极聪明”、“很有激情”、“有个性”、“博闻强记”等用于天才身上的词。我对她的一个作品印象最强烈,就是Perl文言文编程模块。谁能想到这样的Perl程序源代码?
use Lingua::Sinica::PerlYuYan;
用警兮用嚴。
印道
1..1
哉兮
印編曰雜申雜申矣
又曰ok矣
又曰1矣
亂曰
國無人莫我知兮 又何懷乎故都
既莫足與為美政兮 吾將從彭咸之所居
最令人惊讶地是,她出生之时本为男儿身,名叫唐宗漢,很男子汉气概的名字啊。2005年底他变性成为女性,名字改为唐鳳,英文名字从Autrijus Tang变为Audrey Tang。「唐鳳」在她的blog中把变性一事用“runtime type-casting"来形容,我真被这个小幽默逗笑了。她还贴出了自己的新照片。--很令人惊讶的一个人啊,不过我一向觉得天才往往会做出更多令人惊讶的选择,如果她自己觉得开心,又干别人什么事呢。
最后,加一个八卦文章链接:“AudreyT被輕薄了”。
分类
Software评论(8)
发表评论

会perl的话 在美国很好找工作
可惜我不会 哎 我连C都写不好 所以我快要待业了 5555
你不会待业的,现在电子行业好像又景气了耶
我industry的experience几乎等于0. 所以job hunting过程中很不attractive.
我大概投乐qualcomm近10个position, 上周终于有个hiring manager搭理我乐. 几轮email, 最后一个让我写code. 其实挺简单的,用C写个program to display last 'n' lines of an arbitrary length of file. 我琢磨着估计我写的code不规范吧, 所以发去以后, 老印hiring manager就不搭理我乐. 真是frustrated.
狂晕狂晕!
看前面的时候我说怎么没听过这个名字,好歹我也用过一点perl啊。直看到唐宗漢这个名字!我也使用过他/她的模块呢! 真是奇人奇事啊!
也仰慕一下Mach的八卦精神。。。
没用过PAR,用过perl2exe和另外一个类似的,就是转出来的东西体积有点庞大,其他还好。
这个hiring manager不厚道么,你又不应聘软件。。。而且他出的这个题其实是蛮复杂的,有很多exception要handle,要想写到80分都困难。加油加油,这是他们的损失,会有更好的位置等着你的。
讨教一下mach 有些啥exception要handle啊 我每次想这些exception都想不全面
现在不管啥职位 C是一定必须的 这个position是embedded system (UMTS)的
不见得考我matlab吧 这也没啥好考的
啊,硬件的职位也要C啊,这个世道真是奇怪啊
这个题目最麻烦的就是如何处理大文件,fopen()只能处理小文件,有一些类似的函数是做大文件用的,但是有OS相关性。我考别人嵌入式系统最喜欢考Nand flash file system的结构,哈哈是不是更不厚道。
Specialists say that credit loans help people to live the way they want, because they can feel free to buy necessary stuff. Moreover, a lot of banks present auto loan for all people.