当这种事情发生的时候,你大概会想:“好吧,那我写一些技术文章放到网上。”但是你开始着手这个计划的时候你会发现,你需要一种内容管理系统,一种发布系统,一些日志分析,然后收集和报告用户们在你的网站上的反馈,你早就该做这件事了。
幸运的是你知道Perl,然后你用Perl在三个月时间搞定了所有东西,仅仅靠了4个十分繁忙的技术支持工程师们的一些业余时间。
案例 2 - BYTE网站的快刀斩乱麻的转换
BYTE杂志准备要更新它自己的信息网络和会议系统,BIX,用这个系统编辑和读者可以交流各种信息。这个会议系统和Usenet很不同,倒和Mail- list有点像。可是许多BYTE的编辑都习惯用Usenet,因为他们一直订阅Usenet。因此BYTE建了一个接口,把BYTE内部的讨论组变成了 Usenet系统。使用的语言就是Perl,只用了几天的时间和不到一百行的程序。
案例 3 - 把客户的需求转到合适的专家那里
一个世界领先的计算机公司的性能测试小组想把用户需求的导航自动化。他们想利用企业内部网的设计解决这个问题,但是确没有任何经费预算。两个只有几周 Perl编程经验的工程师解决了这个问题。Perl脚本对查询的关键词进行自动匹配,然后将他们导航到他们要找的专家的网页。这个CGI程序不仅将客户指向他想找的专家页面和E-mail地址,而且自动把他的需求发送到专家那里。这个解决方案最终只花了短短几个星期,而且节省了很多预算。
案例 4 - email调查结果的收集和分析
一个Internet市场调查公司使用E-mail来做为调查手段,他们想对得到的一万个回复做自动化的分析。于是Perl又派上了用场。Perl脚本产生了SPSS的输入结果,虽然实际上Perl本身也可以用来做统计,如果这个统计学家会用Perl的话。
案例 5 - 跨平台的评测体系
SPEC(标准性能评测协会),一个评估计算机系统的工业协会,将他们的评测系统从SPEC92升级成SPEC95的时候,将主程序做了巨大的改动。他们希望能比较省力的让他们的系统能在UNIX以外的平台下运行。SPEC92系统是使用UNIX shell管理的,不可移植而且没法扩展。SPEC95系统则使用了一个用Perl写的可移植和扩展的管理引擎。这个程序充分利用了Perl的面向对象特性,Perl对C的拓展性,以及Perl的动态模块载入。将SPEC95移殖到Windows/NT平台很容易。移殖到VMS系统的主要难度则在于VMS 缺乏用户级别的fork方法。
案例 6 – 使用Perl工作的商业顾问
虽然很多年来我一直使用C语言工作,但是我发现再没有理由继续使用它了。我十年来的大部分工作都是获取、管理和转换信息,而不仅仅是数据。我参与开发的应用程序不过是带了图形界面的信息获取、管理和转化系统。Perl如今比任何其他的语言都胜任这项工作,不论是脚本语言还是系统编程语言。虽然我最开始只是使用Perl做为粘贴脚本和原型语言,但是现在我已经用它来干所有事情。它取代了我的C和UNIX shell程序。虽然,某些情况下我可能还是需要使用C语言,不过我希望Java最终将能够满足我的这些需求。
跨平台的GUI界面如今用HTML或本地运行上都做的很好,比如在企业内部网,或者是互联网上。
Perl提供了方便的数据结构接口以及商业数据库的界面模块。它为我提供了系统级的工具用于进程控制,文件管理,以及进程间通讯(只要有socket存在)。它让我可以用库,模块,包,还有子程序等等东西创建我的程序。它还可以让我写一些能够修改自身的程序,虽然看起来有点怪,不过有时候这个很必要。
Perl给我的最大好处在于我只需要原来五分之一的时间就可以完成一个复杂的任务。这个对于管理人员和客户都很有吸引力,不过最感兴趣的是那些为这个付钱的人。
案例 7 – Perl做为飞行数据分析的快速原型语言
Phil Brown, Mitre 公司高等飞行系统研发中心(CAASD)(
philsie@crete.mitre.org)
由于它的稳健和可塑性,它已经成为CAASD中很多程序员使用的工具,用来开发概念模型的快速原型。交通流管理实验室(T-lab)已经在使用数以百计的 Perl程序,从简单的数据界西和描点制图,到测算空间领域的复杂性,并计算飞行器传过这些领域的飞行时间。这些程序的大小从10行一直到1200行。因为许多这样的程序都高强度地使用I/O,因此Perl由于其多样地解析和搜索特性成为完成这些任务最自然的选择。
案例 8 – 在线专业打印
iPrint折扣打印与网络文具商店(
http://www.iprint.com)使用一种所见即所得的网络桌面发布程序,直接连结到后台的打印机,并且建立在一个复杂的实时多功能的产品与价格数据库技术之上。顾客来到这个网站,在线地建立,测试然后预定定制的打印物品,如名片,信纸,商标,邮票,以及其他东西,特别是一些广告。
iPrint系统包括一个前台系统(网站)和后台进程,免去了操作打印机需要的所有前期手工过程,并为iPrint会计系统提供所有需要的信息。这个系统里接近80000行的程序中95%都使用Perl v5.003写的,运行在WindowsNT4.0上。iPrint非常依赖RDBMS(SQL服务器),而所有与服务器的交互都是用Perl和ODBC 完成的。iPrint使用了包括MIME和Win32::ODBC在内的许多CPAN模块。
案例 9 – Amazon.com的作品编辑系统
Amazon.com使Perl开发了一个基于CGI的编辑作品系统,综合了写作(使用Microsoft Word或Emacs),维护(CVS版本控制和使用glimpse方法的搜索),以及输出(使用正规SGML工具)的整个流程。
作者先使用CGI程序建立一个SGML文档,填一个小表格,然后将在用户的home目录下产生一个部分完成的SGML文档,它也可以在Microsoft Windows中被加载。而后作者可以用自己喜欢的编辑器来完成这个文档。利用CGI程序,用户可以看到文档的变化(’cvs diff’)以及用HTML方式在递交之前看到他们的SGML文档(’cvs commit’)。作者可以用关键词搜索SGML库(使用glimpse方法),以及追踪版本变化(’cvs log’)。编辑们也可以利用CGI程序建立时间表。
Amazon.com建立了一个基本的SGML精简类,然后建立了一些子类来进行不同模式下对网站不同部分的提炼(含图片的HTML或没有图片的HTML,将来可能还有PointCast,XML,braille等等)。
所有的代码都是使用Perl写的。它使用了CGI以及HTML::Parser模块。
案例 10 – 新英格兰医院的特殊打印服务器
新英格兰地区的医院系统里使用了十二种操作系统,从大型机一直到个人电脑系统。同时存在七种不同的网络协议。有将近一万二千台PC和两千台同一型号的打印机,以及一千台特殊打印机。这个网络分布在整个城区,利用微波,T1,T3以及光纤。我们要做的事情是实现网络打印。由于特殊打印机是用来在每个专有网络中打印病人的注测和帐户信息的,它通过转有网络连结在IBM大型主机上。现在的目标是希望使用标准的协议
利用标准的打印机来打印这些文档。
寻找了各种合适的可扩充打印服务系统之后,发现MIT Project Athena的Palladium可以做为不错的开发基础。不过它是独立打印服务器系统,不符合我们的要求,医院需要一种分布式的服务器。我们花费了两个月的时间希望将Palladium移殖到医院的平台上然后做些修改,但是最终我们发现这太不经济了。最后我们决定自己来建立我们要的系统,使用Perl做为核心程序,Tcl/Tk做GUI管理界面。Palladium有30000行源代码,而我们更复杂的分布式服务器系统只涌了5000行的Perl以及四个人月的工作量就完成了第一个版本。这个Perl程序在一台运行UNIX的60MHz的Pentium机器上运行的速度已经足够快,所以没有必要再用C 重写任何代码。
案例 11 – Purdue大学的网络计算中心
在将来,计算处理有可能采取以网络为基础的服务模式,类似今天的电力供应和电话系统的体系构架。这种模式需要一种能够利用网络访问软件与硬件资源的底层机制。为了实现这个功能,我们开发了一种基于网络的虚拟实验室(”The Hub”),可以让使用者利用Netscape这样的www浏览器访问和运行服务器上的软件。
The Hub是一个可以用www访问的各种模拟工具与相关信息的收集,它是高度模块化的系统,有接近12000行的Perl代码。它包含了几个组成部分:a)通过www访问的用户界面。b)提供访问控制(安全与隐私)以及任务控制(运行、中止,以及程序状态函数)。 c)支持逻辑(虚拟)资源组织与管理。在Hub上,用户何以:a)上载与操作输入文件。b)运行程序。 c)浏览与下载输出文件。所有过程都是通过www浏览器实现。其内部结构是一系列专门的服务程序(用perl5写成)组成的分布式实体。这些服务程序控制了本地和远端的软件与硬件资源。硬件资源包括任意的硬件平台,软件资源包括该平台上所有程序。(目前的版本还不支持交互式和基于GUI的程序)
The Hub允许各种工具根据它们的域被组织在一起并且可以交叉引用。资源可以通过一种特别设计用来描述工具与硬件特性的语言逐步地向这个系统添加。例如,一个新的设备可以仅仅通过描述它的型号,运行模式,操作系统等信息便很容易的添加到Hub系统中。类似地,一个新工具软件可以通过“告诉”Hub系统它的位置,输入方法(如命令行语句),可以运行在何种机器上(如Sparc5),以何种形式整合到Hub系统中(如电路模拟程序)等等信息来被整合进入Hub系统。这些工作通常可以在半小时内完成。
为了实现这种功能,Hub解析URL的方式和标准的面向文档的web服务器不同。URL的结构与底层的文件系统分离开来,而采用一种上下文敏感的方式解析(基于服务器上储存的用户详细状态),以此来完成虚拟帐户和自由存取控制。Lab引擎可以提供它的高性能计算能力给Hub系统随时调用。当一个用户请求运行一个程序时,lab引擎使用用户指定的输入文件来决定(通过人工智能子系统-同样是使用Perl编写的)使用哪些资源来运行,选择一个合适的平台(如工作站解决2-D问题,超级计算机解决3-D问题),将相关输入文件传到相应的平台,通过远端服务器启动程序。当计算结束之后,远端服务器提示lab引擎,然后取回输出文件,递交给用户。
最初的原型系统:半导体模拟Hub,包含来自四个大学的十三个半导体技术工具程序。在不到一年的时间里,超过250个用户进行了超过13000次的模拟运算。提供VLSI设计的Hub,计算机体系结构和并行计算技术也在最近几个月被添加进来。目前他们维护了十四个左右的程序。这些Hub系统现在在 purdue大学的一些本科生课程和研究生课程中被使用,同时也用来协助合作性的研究。经常使用这个系统的包括Puedue大学的一些学生和来自欧州和美国不同地区的一些研究人员。