| 订阅 | 在线投稿
分享
 
 
 

吸引C和Java程序员目光的Perl5.6

2008-05-19 06:25:57 编辑來源:互联网 国际版 评论
 
 
本文为【吸引C和Java程序员目光的Perl5.6】的汉字拼音对照版显示拼音
  Perl jieshiqi

  chuxuezhemashangjiuhuifaxian Perl zhongsihumeiyourenhebianyiqishishishangPerl jiaobendaduoshiyou Perl jieshiqizhijieyunxingdeliru UNIX xitongxiade "Perl"DOS/Windows xiade "perl.exe" jiushi Perl jieshiqierzai MacOS zhongzebuxuyaozhexiejieshiqininkeyishishikanruheyunxing Perl jiaobenshouxianzainindecaozuoxitongshangqidongxiangyingde Perl jieshiqihuoshizai MacOS xitongzhongzhijieyunxingzaidaduoshuxitongzhongwenjianyibiaozhiUNIX xitongzhongwei Control-Dyonglaibiaoshiyonghushurujieshuyincizai UNIX xitongzhongxiamianzhegejiaobenjiangnengdedao "5+6" dejisuanjieguo

  congzuijiandande Perl chengxurushou

  perl

  (Perl is waiting for user input here, because no script name is given)

  print 5+6

  You press Control-D here

  11

  keyikandao Perl jieshiqiyunxinglezhegezhiyouyixingdejiaobenchengxubingshurugaibiaodashidejisuanjieguo 11

  Perl jieshiqiyouxuduoxuanxiangliru-e xuanxiangbiaoshijiangminglingxingdeshuruzuoweijiaobenwenjianlaizhixingyincishangmiandejiaobenliziyekeyizheyangshixianzaiminglingxingshuru perl -e'print 5+6'zhuyiyaoyongdanyinhaojiangminglingkuoqilaier -i xuanxiangzeleisiyutongguoyigeguolvqiyuanxuzaiwenjianzhongbutongdeweizhijinxingbianji-n he -p xuanxiangnengrangchengxuyuandakaihuoguanbishuchu-w xuanxiangyu C/C++ zhongde "-Wall" bianyixuanxiangleisidounenggouduichengxuzhongqianzaiwentigeichujinggaoxinxidanyu -Wall butongdeshi-w gongnengzaichengxuyunxingshiyeshibeijihuode

  suduhe Benchmark

  renmenchangchangna Perl yu C/C++ bijiaobingbaoyuan Perl yunxingsudubugoukuaimouxieshihouzhedequeshishishidanshibingfeiyongyuanruciwojianyininzairenwei C huo C++ gengkuaizhiqian使shiyong Benchmark mokuaishishikan (perldoc Benchmark)ciwaiPerl nenghenfang便biandiyu C/C++ daimahuokulianjieqiemouxie Perl neizhihanshubingbubi C daimamanrupaixuhuodayindengzhelizaicitixingninzaijianxin C/C++ bijiaokuaizhiqianxian使shiyongyixia Benchmark mokuai

  yaojizhuguozaodeyouhuawangwangshicuowudegenyuanruguoninzai Perl zhongxieleyigeyuanxingbingyongqitayuyanlaichongxieshimeiyouwentideyuanxingyiweizhenenggoufang便biandikaifa

  yu Java xiangbieryanPerl yenenggouhenhaodigongzuoPerl buxiang Java nayangshanchangyu线xianchengdantade Tk GUI jiemiangongjuxiangquebi Java de Swing GUI kuyaohaobingqie Java daimazongshinenggoulianjiedao Perl chengxuzhongfanzhiyiranyinciyoushininkeyitongguomouzhongchengdushangdejiehe使shidechengxuzailiangfangmiandouzuodehenhao

  yichangbianyihewendang

  Perl tongguo CPAN zhongdemokuaihuoshiqineizhihanshu eval() laipaochuyichangjiuhaoxiangzai C++ huo Java zhongtongguo try/catch daimakuailaichuliyichangyiyangeval hanshunengchulimougedaimaduanhuomougezifuchuancaozuodeyichang

  shishishangPerl chengxuzaiyunxingzhiqianhuanshixuyaobianyidezhishihe C/C++/Java debianyifangshibuxiangtongzaishejihexiaoguoshangtahe Java dezijiejieshiguochenghenxiangsiguanyubianyidegengxiangjinneirongkeyishenyue "perldoc perlrun" he "perldoc perlcc" wendang

  keyong POD geshilaijiangwendangqianru Perl chengxuzhezhongwendangqianrufangshibi Javadoc geshijinshiheyu API wendang)yaotongyongdanbibushang C/C++/Java dezhushi

  ji使shihe CC++ huo Java bijiaoqilaiPerl chengxuyebusuanshiyizhongjiegouxingqiangdeyuyanliruBEGIN yujukuaihuibeishouxianzhixingdantakeyizaichengxuzhongduocishuomingdingyibianlianghehanshutikeyizaichengxuderenyiweizhichuxianPerl suotigongdiqiangdagongnengkeyizuihaodimanzuzhezhongsuiyixing

  youyuzhezhongsongsanjiegouqianrudezhushiyijiweizhuiqiufang便bianerdaozhidelingrenhunxiaodeyuju使shideshuxie Perl chengxugengxiangshizaixieyifengyingwenxinjian

  Perl derongcuonengli

  Perl bi C/C++/Java gengnengrongrenyixiemohudixiefalirukeyiyongdouhaolaifengeyujuhuohanshudeshenshu

  yujuzhijianhuohanshushenshuzhijiandefengefu

  print 'Hello', ' ', 'there.', "\n";

  # print "Hello there\n"

  foreach (1..10)

  {

  my $i;

  $i = $_ * 2, print "$i\n";

  # print evens from 2 to 20

  }

  Perl nengjinzuidakenengdixiaochuzhexieyujukenengyinqideqiyidangranyouxieshihourengyouwufajiejuedeqiyizaizheyidianshangPerl jiuxiangyingyuyiyang

  Perl zhonglingyigerongyiyinqiqiyidedifangzaiyubianliangjingchanghuibeiyinhan使shiyongliru"print" yujuqueshengshihuidayin $_ bianliangdezhizaiqitayixiehanhundeyujucaozuozhong$_ bianliangyeshitamendequeshengzhizhejiuzaochengleyizhonghunluanliru

  yinhan使shiyongbianliang

  $_ = "hello";

  s/hello/hi/;

  # $_ is "hi" now

  print;

  # prints "hi"

  zhelinikeyikandao使shiyongqueshengbianliangnengrangbianchengfang便bianjianjieyejiushishuoPerl heyingyuleisitongguomouzhongmohuxinglaijianhuabiaodashi

  yixiangrenwuduozhongshixian

  (There's more than one way to do it ,TMTOWTDI)

  suoyoudeyuyanzaijiejuewentishidouyouzijidefangfazai C limianfor() xunhuanshizaiyidingfanweineichongfudezuihaofangfazai Java lijingtaihanshudetiaoyongshizhijietongguoleierbushimougeshili

  danduiyutongyijianshiqingPerl zhishaoyouliangzhongjiejuefangfaTMTOWTDI yuanzejiushi Perl dezuoyouminggezhongchulishangdechayizai Perl bianchengzhongshishenshougulide

  xiamianlaikanyigedayinshuzuyuansudelizisuoyoudebiaodafangfadoudadaotongyimude

  dayinshuzuyuansu

  print foreach @array;

  foreach (@array) {print};

  map {print} @array;

  print @array;

  yaolijieyishangzhexiedaimadeweiyitujingjiushizhangwosuoyou Perl deyufabuyaodanxinnazhongfangfacaishizhengquedeyinweishixiantongyimubiaozongshiyouduozhongzhengquedefangfakaolvzhexiebutongdebiaodafangshininkeyigengshenketihui Perl dezhegezuoyouming

  lingwaisuiranyigerenwudeshixianyouduozhongfangfadanzhebingbuyiweizhesuoyoufangfadoushizhengquedetongchangqingkuangxiagengyoukenengxiechudeshiyixiecuowudaimaweilebaozhengdaimadezhengquexingzuihaojinliang使shiyongnaxie Perl neizhidehanshuerjiaoshao使shiyongzijisuobianxiedehanshubingqiezhuyizhengmingbingjiluzhexiebunamexianrandefangfa

  zhengzebiaodashi

  ruguomeiyouchushihuazhengzebiaodashihenyoukenengzaochengyipianhunluandaduoshurendouxiangxinzhengzebiaodashishiyou Kalahari bushmen famingdetashentoudaoledaxuedejisuanjikexuebianchengdesuoyoufangmian

  Perl dezhengzebiaodashishicong shell jiaobenchengxuyiji awk/grep gongjuzhongjichengerlaidedantadenengliqueyuanyuanchaochuleyuanlaidemoxing

  jichudezhengzebiaodashishifeichangrongyishuxiededannanyidudongliru "con\w+" he "contra""contrary" pipeidanyu "pro" huo "con" doubupipeiranerzai Perl 5.6.0 zhongzhengzebiaodashibeiguhualeUnicode zifujimoshineirenyidaimacaozuoflag togglestiaojianbiaodashiyijiqitatezhengdoubeitianjiadaozhengzebiaodashikuzhong

  duiyuchuxuezhedeyigezuihaodejianyijiushishouxianxuexizuijibendezhengzebiaodashishenyue ziliao bufenhuo "perldoc perlre" shenkaoshouceshaohoucaijinyibuxuexinaxiefuduodegaojitexingyouyuzhengzebiaodashibixuquanxiezaiyiqizhongjianmeiyoubanfatianjiazhushizhejiurangtamenchengweisuoyou Perl daimazhongzuinandudongdeyibufenyincijianyidajiashuxieyichengxingdedaima

  zai C/C++/Java zhongzhengzebiaodashishuyuwaibudehanshubaodan Perl shimuqianzuijiadezhengzebiaodashisousuohedaihuangongjuzaijishaoshuqingkuangxiatakenenghuibichun C chengxumanyixiedanduiyunaxiechuncuimianxiangzhengzebiaodashidewentiPerl yiranshininshouxuandegongju

  biaoliangshuzuhehaxisanlie

  he CC++Java zhongbianliangbutongdeshiPerl debianliangdeleixingshiyouqimingzijuedingde,bingqiehuizidongchushihuachengxiangyingleixingzheyidianrang Perl chuxuezhejiaodehenbuxiguandantafeichangdizhiguaneryiyulijie

  bizhetuijian使shiyong "use strict"tongguotakeyibaozhengbianliangzai使shiyongzhiqianshengmingcongerbimiandazicuowudengyinqidechengxucuowu

  ruguomeiyouzuodaozheyidianzeyoukenengyudaoxiamianzheyangdewenti

  yigechangjiandedazicuowu

  $i = 5;

  print $j;

  # print $i

  cilizizhongchengxuyuanbenlaiyaodayinbianliang i dezhijieguoqueqiaochengle jPerl bingbuhuijiaodezheduandaimayoushenmewentitahuijixuzhixingdayinyujuxianshi $j dezhijishenmedoumeiyouyouxieshihouPerl dezidongshengchengduixiangdequehenyouyongdanyiwodejingyanlaishuozuihaohuanshiyong "use strict" laiguandiaozheyizidonggongnengcongerbimianshangshuwenti

  Perl bianliangkeyishibiaoliang (scalars)shuzu (arrays)huohaxisanlie (hashesyoujiaozuoguanlianshuzu)shishishangPerl zhongyouduozhongshujuleixingdanshichengxuyuanbingbuhuizhijiemianduitamenciwaiyekeyishiyinyongtongchangtamenyeshiyizhongbiaoliangleixingqizhongbiaoliangmingchengyi "$" kaitoushuzumingyi "@" kaitouersanliezeyi "%" kaitou

  biaoliangshi Perl zhongzuijiandandeshujuleixingmeigebiaoliangdouyouweiyidezhihuozheshizifuchuanhuozheshiyinyongzaibiyaodeshihouzifuchuanheshuzikeyihuxiangzhuanhuazhechangrangchuxuezhejiaodexinxiyichangkanyixiazhegelizi

  biaoliang

  $i = "hi there";

  print 1+$i;

  # prints 1

  qizhongbiaoliang $i dezhishizifuchuan "hi there"taduiyingdeshuzhiwei 0yinci 1 + "hi there" dezhiwei 1chengxuyunxingjieguowei 1

  buguozhebingbuyiweizhe Perl jieshiqizaiduimougebiaoliangfenbiekaolvqizifuchuanleixingheshuzileixingshishishangzaineicunzhongzhishiyigehanyoumougezhidebiaoliangruguozaishuzhiyunsuandeyujuzhongrujiafazhegebiaoliangzhijiuzhuanhuachengshuzhixingshiruguozaizifuchuancaozuoyujuzhonglirudayinzeyizifuchuanxingshizhixingdanwulunyishenmexingshiyunsuangaibiaoliangbianliangshizhishangzhiyouyigezhi

  weidingyidebiaoliangdezhiwei "undef"ruguozai C/C++/Java chengxuzhongninkeyijiangqitazhiyu null bijiaodanzai Perl zhongquebunengnarenhedong西xilaiyu "undef" zuobijiaokeyongzheyang

  原文
 
 
  Perl 解释器   初学者马上就会发现 Perl 中似乎没有任何编译器。事实上,Perl 脚本大多是由 Perl 解释器直接运行的,例如 UNIX 系统下的 "Perl"、DOS/Windows 下的 "perl.exe" 就是 Perl 解释器。而在 MacOS 中则不需要这些解释器。您可以试试看如何运行 Perl 脚本。首先在您的操作系统上启动相应的 Perl 解释器,或是在 MacOS 系统中直接运行。在大多数系统中,文件尾标志(UNIX 系统中为 Control-D)用来表示用户输入结束。因此在 UNIX 系统中,下面这个脚本将能得到 "5+6" 的计算结果:   从最简单的 Perl 程序入手    perl   (Perl is waiting for user input here, because no script name is given)   print 5+6   You press Control-D here   11   可以看到 Perl 解释器运行了这个只有一行的脚本程序,并输入该表达式的计算结果 11。   Perl 解释器有许多选项。例如,-e 选项表示将命令行的输入作为脚本文件来执行,因此上面的脚本例子也可以这样实现:在命令行输入 perl -e'print 5+6'(注意,要用单引号将命令括起来)。而 -i 选项则类似于通过一个过滤器,允许在文件中不同的位置进行编辑。-n 和 -p 选项能让程序员打开或关闭输出。-w 选项与 C/C++ 中的 "-Wall" 编译选项类似,都能够对程序中潜在问题给出警告信息,但与 -Wall 不同的是,-w 功能在程序运行时也是被激活的。   速度和 Benchmark   人们常常拿 Perl 与 C/C++ 比较,并抱怨 Perl 运行速度不够快。某些时候这的确是事实,但是并非永远如此。我建议您在认为 C 或 C++ 更快之前,使用 Benchmark 模块试试看 (perldoc Benchmark)。此外,Perl 能很方便地与 C/C++ 代码或库连接,且某些 Perl 内置函数并不比 C 代码慢,如排序或打印等。这里再次提醒您在坚信 C/C++ 比较快之前,先使用一下 Benchmark 模块。   要记住,过早的优化往往是错误的根源。如果您在 Perl 中写了一个原型,并用其他语言来重写是没有问题的。原型意味着能够方便地开发。   与 Java 相比而言,Perl 也能够很好地工作。Perl 不象 Java 那样擅长于线程,但它的 Tk GUI 界面工具箱却比 Java 的 Swing GUI 库要好。并且 Java 代码总是能够连接到 Perl 程序中,反之亦然。因此,有时您可以通过某种程度上的结合,使得程序在两方面都做得很好。   异常、编译和文档   Perl 通过 CPAN 中的模块或是其内置函数 eval() 来抛出异常。就好像在 C++ 或 Java 中通过 try/catch 代码块来处理异常一样,eval 函数能处理某个代码段或某个字符串操作的异常。   事实上,Perl 程序在运行之前还是需要编译的,只是和 C/C++/Java 的编译方式不相同。在设计和效果上,它和 Java 的字节解释过程很相似。关于编译的更详尽内容,可以参阅 "perldoc perlrun" 和 "perldoc perlcc" 文档。   可用 POD 格式来将文档嵌入 Perl 程序。这种文档嵌入方式比 Javadoc 格式(仅适合于 API 文档)要通用,但比不上 C/C++/Java 的注释。   即使和 C、C++ 或 Java 比较起来,Perl 程序也不算是一种结构性强的语言。例如,BEGIN 语句块会被首先执行,但它可以在程序中多次说明。定义、变量和函数体可以在程序的任意位置出现,Perl 所提供地强大功能可以最好地满足这种随意性。   由于这种松散结构、嵌入的注释、以及为追求方便而导致的令人混淆的语句,使得书写 Perl 程序更像是在写一封英文信件。   Perl 的容错能力   Perl 比 C/C++/Java 更能容忍一些模糊地写法。例如可以用逗号来分隔语句或函数的参数:   语句之间或函数参数之间的分隔符   print 'Hello', ' ', 'there.', "\n";   # print "Hello there\n"   foreach (1..10)   {   my $i;   $i = $_ * 2, print "$i\n";   # print evens from 2 to 20   }   Perl 能尽最大可能地消除这些语句可能引起的歧义。当然,有些时候仍有无法解决的歧义(在这一点上,Perl 就象英语一样)。   Perl 中另一个容易引起歧义的地方在于:变量经常会被隐含使用。例如,"print" 语句缺省时会打印 $_ 变量的值。在其他一些含混的语句操作中,$_ 变量也是它们的缺省值,这就造成了一种混乱。例如:   隐含使用变量   $_ = "hello";   s/hello/hi/;   # $_ is "hi" now   print;   # prints "hi"   这里你可以看到,使用缺省变量能让编程方便简洁。也就是说,Perl 和英语类似,通过某种模糊性来简化表达式。   一项任务多种实现   (There's more than one way to do it ,TMTOWTDI)   所有的语言在解决问题时都有自己的方法。在 C 里面,for() 循环是在一定范围内重复的最好方法;在 Java 里,静态函数的调用是直接通过类而不是某个实例。   但对于同一件事情,Perl 至少有两种解决方法。TMTOWTDI 原则就是 Perl 的座右铭,各种处理上的差异在 Perl 编程中是深受鼓励的。   下面来看一个打印数组元素的例子。所有的表达方法都达到同一目的。   打印数组元素   print foreach @array;   foreach (@array) {print};   map {print} @array;   print @array;   要理解以上这些代码的唯一途径就是掌握所有 Perl 的语法。不要担心哪种方法才是正确的,因为实现同一目标总是有多种正确的方法。考虑这些不同的表达方式,您可以更深刻体会 Perl 的这个座右铭。   另外,虽然一个任务的实现有多种方法,但这并不意味着所有方法都是正确的。通常情况下,更有可能写出的是一些错误代码。为了保证代码的正确性,最好尽量使用那些 Perl 内置的函数,而较少使用自己所编写的函数,并且注意证明并记录这些不那么显然的方法。   正则表达式   如果没有初始化,正则表达式很有可能造成一片混乱。大多数人都相信正则表达式是由 Kalahari bushmen 发明的,它渗透到了大学的计算机科学编程的所有方面。   Perl 的正则表达式是从 shell 脚本程序以及 awk/grep 工具中继承而来的。但它的能力却远远超出了原来的模型。   基础的正则表达式是非常容易书写的,但难以读懂。例如 "con\w+" 和 "contra"、"contrary" 匹配,但与 "pro" 或 "con" 都不匹配。然而在 Perl 5.6.0 中,正则表达式被固化了。Unicode 字符集、模式内任意代码操作、flag toggles、条件表达式以及其他特征都被添加到正则表达式库中。   对于初学者的一个最好的建议就是:首先学习最基本的正则表达式(参阅 资料 部分,或 "perldoc perlre" 参考手册),稍后才进一步学习那些复杂的高级特性。由于正则表达式必须全写在一起,中间没有办法添加注释,这就让它们成为所有 Perl 代码中最难读懂的一部分。因此建议大家书写已成型的代码。   在 C/C++/Java 中正则表达式属于外部的函数包,但 Perl 是目前最佳的正则表达式搜索和代换工具。在极少数情况下,它可能会比纯 C 程序慢一些,但对于那些纯粹面向正则表达式的问题,Perl 依然是您首选的工具。   标量、数组和哈希散列   和 C、C++、Java 中变量不同的是,Perl 的变量的类型是由其名字决定的,并且会自动初始化成相应类型。这一点让 Perl 初学者觉得很不习惯,但它非常地直观而易于理解。   笔者推荐使用 "use strict"。通过它可以保证变量在使用之前声明,从而避免打字错误等引起的程序错误。   如果没有做到这一点,则有可能遇到下面这样的问题:   一个常见的打字错误   $i = 5;   print $j;   # print $i   此例子中,程序员本来要打印变量 i 的值,结果却敲成了 j。Perl 并不会觉得这段代码有什么问题,它会继续执行打印语句,显示 $j 的值即什么都没有。有些时候,Perl 的自动生成对象的确很有用,但以我的经验来说,最好还是用 "use strict" 来关掉这一自动功能,从而避免上述问题。   Perl 变量可以是标量 (scalars)、数组 (arrays)或哈希散列 (hashes,又叫做关联数组)。(事实上,Perl 中有多种数据类型,但是程序员并不会直接面对它们。)此外也可以是引用,通常它们也是一种标量类型。其中标量名称以 "$" 开头,数组名以 "@" 开头,而散列则以 "%" 开头。   标量是 Perl 中最简单的数据类型。每个标量都有唯一的值,或者是字符串或者是引用。在必要的时候,字符串和数字可以互相转化。这常让初学者觉得欣喜异常。看一下这个例子:   标量   $i = "hi there";   print 1+$i;   # prints 1   其中标量 $i 的值是字符串 "hi there",它对应的数值为 0。因此 1 + "hi there" 的值为 1,程序运行结果为 1。   不过这并不意味着 Perl 解释器在对某个标量分别考虑其字符串类型和数字类型。事实上,在内存中只是一个含有某个值的标量。如果在数值运算的语句中(如加法),这个标量值就转化成数值形式;如果在字符串操作语句中(例如打印),则以字符串形式执行。但无论以什么形式运算,该标量变量实质上只有一个值。   未定义的标量的值为 "undef"。如果在 C/C++/Java 程序中,您可以将其他值与 null 比较,但在 Perl 中却不能拿任何东西来与 "undef" 做比较。可用这样   
󰈣󰈤
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

网络安全治理:国家安全保障的主要方向是打击犯罪,而不是处置和惩罚受害者

来源:中国青年报 新的攻击方法不断涌现,黑客几乎永远占据网络攻击的上风,我们不可能通过技术手段杜绝网络攻击。国家安全保障的主要方向是打击犯罪,而不是处置和惩罚...

 
 
 
>>返回首页<<
 为你推荐
 
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 
 热帖排行
 
清纯得让人窒息(7)
清纯得让人窒息(6)
天泽海韵宣传片
赣州文庙
 
 
王朝网络微信公众号
微信扫码关注本站公众号wangchaonetcn
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
©2005- 王朝网络 版权所有