写Perl程序的方法步骤
前几天,客户要求为程序增加一个新功能,该功能用于获取生成到指定目录下的静态数据文件,该文件每天定时生成。由于程序已经写好,所以决定另外写一个小程序。
虽然这个小程序功能简单,代码也不多,但在技术的选择上却颇费了一番思量。一直以来,我们都在写C程序,首选自然是C。但客户认为,这么简单的功能,不如直接写个Shell算了,甚至还给出了示例代码。不过客户忽略了一点,在取这个静态数据文件之前,是要对静态数据文件进行完整性校验的,要对文件生成MD5码,这点Shell是做不到的。最后,我选择了Perl。
应该说,这个选择是出乎所有人意料的,因为当时我们对Perl的了解程度只是知道有这么个脚本语言,甚至连如何定义Perl的变量、变量是否区分大小写乃至if、for这些语句怎么用,都是一无所知。但我最终选择了Perl,原因如下:
1.客户方面现在有部分项目在使用,早些时候客户也曾就此询问过我们,客户有这个意愿;
2.公司一直提倡为客户提供一流的行业解决方案,但却死守着C/C++、VB、Java、PB、.net不放,而极少甚至从未涉足Perl、Python、Ruby等脚本语言的领域,所以我认为有必要走出这样一步;
3.Perl也是脚本语言,跟Shell一样不用编译,但Perl比Shell更为强悍,而且客户提供的环境已经配置了Perl和Digest-MD5,这也是没选择其他脚本语言的原因之一。
现在有了这样一个案例,我自然不会放过机会,于是用了一个上午,连学习带编写的,把程序完成了。
事后,我发现我的做法对客户产生了一定影响,客户居然向我要Perl的学习资料,并向我讨教。对于这样一个结果,还是很意外的,但毕竟被肯定了。
其实到了这会儿,我对Perl的了解还是很有限,但总结这段时间对C、Shell以及Perl的学习、使用,从不会到会,倒是有几点:
首先是扩展自己的知识面。我从2001年开始接触编程,像VB、Delphi、C++ Builder、C#、Java、JavaScript这些,虽然谈不上精通,但都接触过,而且前一段时间还在学习Ruby On Rails,所以C、Shell和Perl都可以很快上手。
其次是从需要出发。由于有明确的需要,知道程序流程,因此在初步了解过C、Shell和Perl之后,参考手头的资料就可以了。好多人总说自己学编成学不明白,原因就是没有好的案例。
再次是不求甚解。我从手头的资料中拷了不少代码,但其中有好些东西到现在也没完全弄明白,只是知道一段代码放在那可以干那些事而已。有些人写程序一定要把代码逐行逐句的弄懂,结果反而把自己搞懵了;还有些人买书一定要从头看到尾,也不知道能记住多少。
不过在这个过程中也暴露出自己一些缺陷,主要是知识结构有广度没深度,对操作系统、编译原理、数据结构等不了解。但我鄙视那种死抠C,成天把堆栈挂嘴边引以为荣、却连1Byte等于8bit都搞不清楚的人,坐谈客!
后记,在Windows下配置Apache和Perl。
既然用Perl写了程序,顺道便了解了一下如何用Perl做CGI编程。Windows下常用的服务器是Windows自带的IIS和Apache,我选择的便是后者。
我从http://httpd.apache.org/下载了apache 2.0.58,从http://www.activeperl.com/ASPN/Perl下载了ActivePerl 5.8.8。关于两者的安装,网上资料很多,大同小异,这里就不赘述了,下面介绍一下我是如何配置Apache和Perl的。
我从网上看到两种办法,一种是直接修改Apache安装目录下的/conf/httpd.conf文件,一种是使用mod_perl。据说前一种方法每次运行Perl程序时都会单独起一个进程,而后一种方法则不会,因此后一种方法的速度较前一种方法要快一些,于是我选择了后一种方法。
但不知为什么,mod_perl方法总是不灵光,于是自己反反复复的试验,终于摸索出了办法,如下:
下载apxs,地址http://perl.apache.org/dist/win32-bin/apxs_win32.tar.gz,然后解压缩到当前文件夹,进入apxs文件夹,在命令行中执行:
perl Configure.pl
程序询问是否使用当前的Apache安装目录,输入y回车确定。
然后下载mod_perl,地址http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz,解压缩到当前文件夹,进入mod_perl-2.0.2,在命令行中执行:
perl Makefile.PL
询问apxs.bat安装目录,输入C:/Apache2/bin/apxs.bat,回车,等程序结束,环境就配置好了。
至于CGI程序怎么写,又该把程序放在那里,网上相关文章很多,这里也不赘述了。
本文地址:http://www.45fan.com/dnjc/67599.html