a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Perl > 正文

Perl簡介(適合對C語言有點認識的讀者)

2019-11-18 17:23:26
字體:
來源:轉載
供稿:網友
##########################################################################
#版權聲明#
##
#本篇文章的版權為作者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向C$z=1.3e-27;

這個$是表示現在操作的是個純量(相對於list或associativearray).
在C里的
Operator,如 ,-,*,/,,^, ,--, =,-=,*=,/=,=,==,!=,&&,
||,|,&全都有,意思也不變.不過若用於字串,.(dot)是表示連接的意思.
因此.=也有類似C中 =的意思.

$x='Ihate';
$x.="awkprogramming.";
print$x;

結果為Ihateawkprogramming.字串可用單或雙括號圍住.超出一行也沒關.
也可以寫的像shellprogramming中:

$x=<Thispartcanbeputwhat
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'等.

@ARGV是perl執行時的commandlineargument,$ARGV[0]相當於C中的
argv[1].$ARGV[1]相當於C中的argv[2].C中的argv[0]放在$0.
ENV是perl執行時的environmentvariable,$ENV{'HOME'}就是user
的homepath,$ENV{'PWD'}就是currentpath.

其它特殊變數請參考perlvar.1.


2.6FileHandle
perl中主要開檔的方法:

open(FH,"test.dat");#寫入
open(FH,"greppetertest.dat|");#先經greppetertest.dat處理後的p}
close(FH);
結果會把test.dat加4位行號印出.(只寫時相當於省略$_=).


2.7RegularExpression
perl對於regularexpression有重新改寫.好用且功能強,是sed和awk的
superset.要求執行regularexpression比對的operator為~=(match),
!=(notmatch).regularexpression用/.../括住.

$line="end;";
if($line=~/end/){
print"match!";
}else{
print"NO!";
}
結果會印出match!,如果改成
if($line=~/^end/){
print"match!";
}else{
print"NO!";
}
結果會印出NO!

一般而言,
^表string的開端,
$表string的結束,
[a-z]表a到z中任一字元
pat1|pat2表pat1或pat2皆可
x*表x重0次或以上
x 表x重1次或以上
/d相當於[0123456789],/D就是相反
/w相當於[_a-zA-Z0-9],/W就是相反
/s表示space,/S表非spacecharacter

若要取代,則:
$d="Sep.15th,Sep.17th";
$a=~s/Sep/9/;
結果是9.15th,Sep.17th,加g(global)option如下:
$d="Sep.15th,Sep.17th";
$a=~s/Sep/9/g;
結果是9.15th,9.17th.另外i(case-insensitive)option可不管大小寫.

2.8Reference
Perl5.0之後允許listoflist也就可能有2-DimensionArray.
例如:

$a[0][0]=1;
$phone{$name}[0]='1234';
$phone{$name}[1]='2674';

實際上是用所謂的reference,就像是C的address.一個純量可純存一個
reference.

@a=(1,2,3);
$aref=/@a;#取@a的reference
print$aref->[0];#相當於print$a[0];
push@{$aref},4;#相當於push@a,4;

2-dimensionarray可以如:
@a=([1,2,3],[4,5,6]);
print$a[1][2];
結果是6.

使用associativearray也類似:
$database{$name}{'home'}{'address'}='No.1234,75thStreet";
$database{$name}{'office'}{'phone'}='02-8127365";

Listofassociativearray也都可以使用.

2.9Example
Email中若有uuencode的資料,可以寫perl將它extract出來.

#!/usr/local/bin/perl
open(EMAIL,"<$ARGV[0]")||die"Cannotopen$ARGV[0]:$!";
#若開不成perl會跳出且印Cannotopen...
while(){
if(/^begin/s /d/d/d/s /){
#遇到begin開頭後印出
print$_;
while(){
if(/^end/){
#遇到end時結述
last;
}
print$_;
}
print$_;
last;
}
}
close(EMAIL);
可以寫得更簡化,不過那就屬於您功力的無限空間了.........


-----ByPinhongChen--------------------------------------------------------
V1.0Feb11,1996

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: www.久草.com | 国产精品日本一区二区不卡视频 | 免费精品视频在线观看 | 欧美日韩亚洲一区二区 | 午夜视频在线播放 | 少妇高潮一级毛片 | 国产精品久久嫩一区二区 免费 | 久久91| 久久av黄色| 欧美日韩国产中文字幕 | 欧美性猛交一区二区三区精品 | 国产欧美精品区一区二区三区 | 可以免费看黄的网站 | 91亚洲精品久久久 | 欧美日韩国产在线观看 | 日本精品一区二区在线观看 | 不卡日本 | 亚洲精品乱码8久久久久久日本 | 男女羞羞视频在线免费观看 | 亚洲精品午夜国产va久久成人 | 欧美日韩在线观看中文字幕 | 日韩视频在线免费观看 | 探花 在线 | 亚洲影视一区 | 五月香婷婷| 国产精品国产三级国产普通话99 | 麻豆高清免费国产一区 | 韩国精品一区二区 | 亚洲中午字幕 | 亚洲人人爽 | 精品久久久久久久久久久久 | 日韩3p视频 | 国产精品久久久久国产a级 日韩在线二区 | 久久久久极品 | 久久骚| 男女视频在线观看 | 色婷婷av一区二区三区软件 | 99精品电影 | 99久久婷婷国产综合亚洲 | 久久高清亚洲 | 日本精品视频在线 |