Username: Password:

跟我学Perl(一)
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


  假如您曾使用过linux,无论时间长短,都必定听说过perl;甚至可能在不知道的情况下运行了不少perl的脚本。很多服务程式,象 “inews”、“mirror”、“debconf”、“majordomo”、“sirc”等等,都是纯粹用perl写的。在Debian区域的 “Packages.gz”文档里做一个简单的的“zgrep”,您就能够知道有382个包需要perl的支持(也就是意味着这些包都至少有一部分是用 perl写的。),其他28个软件包也建议或推荐使用perl支持。

  但是Perl语言有什么出色之处呢?

  "Perl语言在文本处理方面很突出,他把不同的内容联成一个整体。对于这种脚本语言来说任何的那些不同的元素,看起来都是相同的。”??John Ousterhout,Tcl脚本语言的作者

  Perl即“Practical Extraction and Report Language”(实用析取报表语言)。是的,比较粗,但是我想那就是您所得到的??假如您打算确信$HUNN NGOUS CORP并且使用他的话。事实上,Larry Uall< Larry@wall org >(Perl的创立者)在Perl的帮助手册页里提出:“Perl实际上代表的是Pathologically Edectic Rubbish Lister,但不要告诉任何人我这样说过。”唔,他是Larry,对此我又能再说些什么呢?

  Perl已被广泛的认为是“一种拥有各种语言功能的梦幻脚本语言”、“Unix 中的王牌工具”。连同其他的一些类似的称呼,这些都是赞誉之辞,Perl被用来写单行脚本,快速执行程式,大的规划项目(Amazon.com的任何评论产品和控制系统,Netscape的内容策划管理和传送系统,人类整组基因工程的DNA排序连同计划管理等等)。更有数以百万计的令我们惊讶的各种各样的事情的高速程式。Perl还能够实现许多UNIX的公共系统工具的功能(提示:假如您正在学或必须学awk, sed, grep和 tr,我建议您以Perl来代替他们。任何的功能,更快的执行效率,相信您将永远不会因为他的性能发展太快而不适应他。)

  就像您对任何的现代语言所期望的那样,Perl允许您建立面向对象的程式。他也能够进行网络操作(例如socket等等),并且有良好的可移植性(一个写得好的脚本能够在Linux,BSD,Solaries,Dos,Win9x,NT,MacOS,OS/2, AnugaOS,VMS等操作系统中无需任何修改的运行),编写和调试周期很短??由于没有编译的需要,您只需将变化的部分写出,就能够运行脚本。更有数目庞大的可适用于执行任何一项任务的模块(即预建立Perl的例程),Comprehensive Perl Archiue Network (CPAN)就是每一个Perl程式员所能拥有的最好的模块库之一。

  哦,但那是真的吗?

  问得好,我希望在您使用Perl大约一年之后,就能告诉我答案。相同东西的描述就像一个容器……,我仍旧在试图寻找一个适合Perl的足够大的容器(要是带有能锁的盖子就更好了)。

  那Perl不适用的方面呢?

  我不会用Perl去写一个GUI文字处理程式,一个图像游戏,或一个图像浏览器。Perl能通过和许多其他语言的接口真正的交互,所以您能够实现刚才所说的全部程式。但在我看来,在其他编程语言里有许多更有效的方法去做那些事情。“对一个拿着锤子的人来说,任何的问题看上去都像是钉子”??程式员们小心了。

  值得注意的是,Perl本身并不是用Perl写成的,也不是Linalx的内核。那些底层的事务用C/C++来处理会更好的。“用最适合的工具去做最适合的工作”应成为每个程式员的座佑铭。

  在拉开跳伞索之前的最后一次告诫。

  假如您对Perl有一点了解,或看过《Aint The Way I Learned It》系列内容的话,一定记得Perl的口号:“做事总有不止一种办法(There’s More Than One Way To Do It)”。这常被缩写为TMTOMDI,并称为“tim-today”,是Perl的核心观点之一。当然,任何对明显的错误的订正都很欢迎。

  那些看过我早些时间写的关于Shell脚本的丛书的人也许记得,一个脚本开始都有被称作hash-bang或shebang的行:

  #!/bin/ bash

  这行告诉外壳(shell)派生一个subshell(子shell),随后的代码将被这个特定的subshell程式解释执行。Perl脚本也相同,第一行必须是:

  #!/usr/bin/Perl

  或任何一个正确的Perl解释器的路径。

  注意到Hash-bang的必要条件:

  1) 他必须是在脚本中的第一行。

  2) #号必须是本行的第一个字母,并且在#号和!号之间不能有任何字母或符号。

  3) 必须使用绝对的路径,而不是只有可执行程式的名称。

  下面,让我们试着写出我们的第一个 Perl脚本:

  #!/ usr/bin/Perl

  # "goodbye" - a modern, high-angst replacement for "Hello World"

  print "Goodbye, cruel world!

  ";

  unlink $0;

  嗯,至少在离开以前说了“再见”;礼貌夫人都会为此骄傲的。我们在这个脚本里做了什么呢?有几件事情是相当明显的:第一,“hash-bang”,第二,一行告诉我们脚本要做什么的说明?从shell脚本发展出来的另一个东东,并且这是个不错的想法(在代码中并没有过多的解释!)。第三,我们用 “print”函数打印出所要的信息。注意,在一串字符末尾的“ ”:Perl不会自动为您提供一个换行,所以您必须自己决定要还是不要。还要注意,在每一行代码末尾的分号:就像C语言,Perl也有同样的需要,不幸的是这常被编程者所忘记。实际上,由于有着相对易懂的信息,Perl的错误检查十分容易,作为代码语句的分隔标志,分号常被认为是下一行的前导符。假如您注意到这个问题,并不麻烦,最好记住使用分号。

  最后一行的意思是删除 “goodbye cruel world”文档,符号“$0”仅仅是被运行堵塞的脚本的名字的引用,“unlink”做了和“rm”相同的事。注意,“$0”比“goodbye”甚至是“/goodbye”有用的多,不管文档是什么名字,“$0”将返回这个文档名。

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅