Perl简介(适合对C语言有点认识的读者)
##########################################################################
#版权声明# ## #本篇文章的版权为作者PinHongChen先生所有.允许网路上的非营利# #转载.作者的电子邮件地址:honger.bbs@aidebbs.edu.tw# ## #本文可在下列URL取得:# #http://www.math.ncu.edu.tw/~chenym/perl/intro.html# ########################################################################## Fromnews.ncu.edu.tw!news.cc.nctu.edu.tw!news.csie.nctu.edu.tw!aide_boardWedFeb1423:57:101996 Path:news.ncu.edu.tw!news.cc.nctu.edu.tw!news.csie.nctu.edu.tw!aide_board From:honger.bbs@aidebbs.edu.tw(HerDoneMineChao!) Newsgroups:tw.bbs.comp.www Subject:BasicIntroductiontoPerl Date:13Feb199606:54:46GMT Organization:湾学术网路BBS实验站 Message-ID:<3BCREM$5jj@aidebbs.edu.tw> X-Filename:www/M.824194486.A NNTP-Posting-Host:eo4.ee.ntu.edu.tw Lines:307 这是小弟的一篇介绍perl的文章,希望对你有用: :) Honger PPPPEEEEERRRRL PPERRL PPPPEEEERRRRL PERRL PEEEEERRLLLLLL 1.Introduction 这不是perl的完整介绍,只是想将perl向Cprogrammer作个介绍,也许能 有所帮助! perl是由LarryWall先生所写.目前的版本5.002,加入多项的功能.请 看perl.1,那有详细的条列. 一般而言,由awk,sed,shellprogramming写的东西可以轻易用perl来 处理,而且速度更快.在Cprogram中,特别是有关抽取文字档中的资讯,加以转化 处理,用perl写会更加方便,而且不用处处担心pointer和memoryallocation 的问题.当然了,perl执行时会有一道转成内部表示式的关,真正optimized 过的Ccode仍会比perlcode快.一般而言,perlcode会比Ccode短很多. perl在regularexpression,list(array)和associativearray有很方 便的语法和不错的执行效率.连yacc(Berkeleyyacc)也可有产生perlcode的 选项,这对於prototyping十分方便. 2.PerlBasics 2.1BasicdatastructureandControlconstruct perl的comment是从#之後开始.而perl并不区分string ,integer和floatpointnumber的datatype,统统以纯量代表.例如: #Thisisacommentlinetilltheendofthisline $x=1.5; $y="Ihateshellprogramming"; $z=1.3e-27; 这个$是表示现在操作的是个纯量(相对於list或associativearray). 在C里的operator,如 ,-,*,/,,^, ,--, =,-=,*=,/=,=,==,!=,&&, ||,|,&全都有,意思也不变.不过若用於字串,.(dot)是表示连接的意思. 因此.=也有类似C中 =的意思. $x='Ihate'; $x.="awkprogramming."; print$x; 结果为Ihateawkprogramming.字串可用单或双括号围住.超出一行也没关. 也可以写的像shellprogramming中: $x=< youlikehere 1234567890 tillthesignasthebeginning. END 相当於 $x="Thispartcanbeputwhat youlikehere 1234567890 tillthesignasthebeginning."; 字串的比较有eq,ne,gt,lt,....就像那Fortran的operator.聪明的 你猜猜就知道啦. 至於control方面,如if,while,do..while,都和C类似.如: $sum=0; for($i=0;$i<10;$i ){ $sum =$i; } 大括号是不可省略的!这和C不同.也可: $sum=0; $i=0; while($i<10){ $sum =$i ; } 如果你要从loop中跳出来,last相当於C中break,next相当於continue. $sum=0; $i=0; while($i<10){ if($i2==0){ $sum =$i ; next; }elsif($sum>50){ last; } } if叙述要注意大括号是不可省,还有elseif必须写成elsif. 2.2List List和1dimensionarray在perl中没区别.用法如: @a=(1,2,3); $a[0]-=$a[1]; print"a[0]=$a[0]"; 结果就是a[0]=-1.@是表示现在在操作list.双括号的字串中,若有变数,perl 会直接解译.如上例中的$a[0].List可以直接连接: @a=(1,2,3); @b=(4,5); @c=(@a,@b,6,7); print"@c"; 结果是1234567.perl有特殊的变数,$#a来表示@a的最後index, 所以上例中,$c[$#c]就是7,也可写成$c[-1].那麽$c[-2]就是6了. List还有些operator,push,pop,shift,unshift,splice,其中 push推一些元素入list: @a=(1,2); push@a,(3,4); 结果@a成为(1,2,3,4). pop拉最後一个元素: @a=(1,2,3); $b=pop@a; 结果@a成为(1,2),$b变成3. shift,unshift和pop,push类似不过操作在list前端. @a=(1,2,3); $b=shift@a; unshift@a,0; 结果@a成为(0,2,3),$b变成1. Loop也可写成: @weekday=('Mon','Tue','Wed','Thu','Fri','Sat'); foreach$x(@weekday){ #schedulesomething } 结果$x会依序变成'Mon','Tue','Wed','Thu','Fri','Sat'等. 2.3AssociativeArray 这是使用string来做index的array,一般叫作hash. $phone_no{'peter'}='02-9110238'; $phone_no{'john'}="06-1234567"; $name='peter'; print"$namePhoneNo.=",$phone_no{$name},"\n"; 结果就会印一行: peterPhoneNo.=02-9110238 上面两行也可写成: phone_no=('peter'=>'02-9110238','john'=>'06-1234567'); =>和,一样所以: phone_no=('peter','02-9110238','john','06-1234567'); 也可,就是相当於一个key和value,所组成的list. 2.4Subroutine 副程式可以任意摆放,perl全看得到. subfoo{ my$x=$_[0]; my$y=$_[1]; return$x/$y; } $x=1; $y=8; printfoo(4,2); 结果是2. 上例中,my这个keyword表示,$x,$y是在foo围内有效(localvariable insubroutinelexicalscope).而$_[0],$_[1]用於传参数.perl的subroutine 呼叫参数都是放在固定@_的list中. 2.5SpecialVariables perl常使用的defaultvariable是$_. @weekday=('Mon','Tue','Wed','Thu','Fri','Sat'); foreach(@weekday){ #dowith$_ } 结果$_会依序变成'Mon','Tue','Wed','Thu','Fri','Sat'等. 上一篇:PerlCGI程式写作常问问题集(4)安全 下一篇:Perl简介 更多相关文章
|
推荐文章
精彩文章
|