UNIX初級講座Ch07Perl編程語言課件_第1頁
UNIX初級講座Ch07Perl編程語言課件_第2頁
UNIX初級講座Ch07Perl編程語言課件_第3頁
UNIX初級講座Ch07Perl編程語言課件_第4頁
UNIX初級講座Ch07Perl編程語言課件_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、UNIX操作系統(tǒng)北京郵電大學(xué)電信工程學(xué)院多媒體中心第1頁,共80頁。第七章 Perl編程語言概述數(shù)據(jù)類型標(biāo)量列表數(shù)組關(guān)聯(lián)數(shù)組內(nèi)部變量流控基本I/O文件操作格式函數(shù)8/20/20222BUPT MultiMedia Hop Lee第2頁,共80頁。Perl 的全稱是:Practical Extraction and Report Language即“實用摘錄和報告語言”。其開發(fā)者和唯一的維護(hù)者是Larry Wall。Perl的設(shè)計目標(biāo)是幫助Unix用戶完成一些常見的任務(wù),而這些任務(wù)對于Shell來說過于復(fù)雜。Perl語言中包含了C,C+,shell,script, sed,awk 這幾個語言的語

2、法,它最初的目的就是用來取代UNIX中sed/awk與 腳本語言的組合,用來匯整信息,產(chǎn)生報表。因此 Perl語言要遠(yuǎn)遠(yuǎn)比前面講的Bash復(fù)雜和功能強(qiáng)大。8/20/20223BUPT MultiMedia Hop Lee第3頁,共80頁。Perl簡潔的結(jié)構(gòu)允許你開發(fā)一些非常漂亮的、一步到位的方案或通用的工具。由于Perl的高度可移植性,你也可以將這些工具用于其他的任務(wù)。Perl是免費(fèi)的,并且各種常見的操作系統(tǒng)上都存在相應(yīng)版本的發(fā)行。8/20/20224BUPT MultiMedia Hop Lee第4頁,共80頁。一、概述Perl腳本的第一行必須是:#!/usr/bin/perlPerl的注釋

3、和Shell一樣,以#開始Perl更象一個編譯器和解釋器的組合。Perl程序在運(yùn)行之前將進(jìn)行掃描和分析,但是又不產(chǎn)生龐大的目標(biāo)代碼。未來的版本將能夠緩存已編譯的代碼。Perl的所有簡單語句均以分號結(jié)束。8/20/20225BUPT MultiMedia Hop Lee第5頁,共80頁。Perl的數(shù)據(jù)類型主要有三種:標(biāo)量數(shù)據(jù)、數(shù)組(列表)和關(guān)聯(lián)數(shù)組。8/20/20226BUPT MultiMedia Hop Lee第6頁,共80頁。二、標(biāo)量數(shù)據(jù)所謂標(biāo)量就是非矢量、非數(shù)組的數(shù)據(jù)。Perl中的標(biāo)量變量以美元符號$和一個字母開始,后面可以跟字母、數(shù)字和下劃線,Perl的變量區(qū)分大小寫,因此$a和$A是

4、代表不同的變量。和Bash中不同的是Perl語言中的變量即使是在最初賦值的時候也必須在變量前面加上$符號,而且Perl不要求=左右必須沒有空格。8/20/20227BUPT MultiMedia Hop Lee第7頁,共80頁。Perl所處理的標(biāo)量數(shù)據(jù)包括數(shù)字和字符串兩大類。Perl的數(shù)值型數(shù)據(jù)只有一種類型:浮點數(shù),所有的整數(shù)都將當(dāng)作等效的浮點數(shù)來處理。浮點型常量的表示方式和C語言里一樣。8/20/20228BUPT MultiMedia Hop Lee第8頁,共80頁。Perl的字符串類型數(shù)據(jù)的取值可以是整個ASCII表,并且其長度遵循“無內(nèi)置限制”的原則從0直到填滿內(nèi)存。字符串常量有兩種形

5、式:單引號字符串和雙引號字符串。單引號字符串:單引號用于表示字符串的邊界,其中可以包含任意字符并且取消所有元字符的特殊含義(唯一的例外是前后相連的或);8/20/20229BUPT MultiMedia Hop Lee第9頁,共80頁。雙引號字符串:類似于C語言里的字符串,其中的反斜線用于表示特定的控制字符的開始;并且其中的變量將被置換。運(yùn)算符算數(shù)運(yùn)算符+, -, *, /, *, %邏輯運(yùn)算符, =, , 8/20/202210BUPT MultiMedia Hop Lee第10頁,共80頁。字符串運(yùn)算符.串接運(yùn)算符x復(fù)制運(yùn)算符eq, ne, lt, gt, le, ge, cmp字符串邏輯

6、運(yùn)算符數(shù)值和字符串之間的轉(zhuǎn)換如果某個字符串的值被用于數(shù)值運(yùn)算符的運(yùn)算域,在Perl將自動將其轉(zhuǎn)換為一個十進(jìn)制浮點數(shù),并且去掉開頭的和末尾的非數(shù)字元素。同樣的轉(zhuǎn)換發(fā)生在某個數(shù)值作為字符串使用時。8/20/202211BUPT MultiMedia Hop Lee第11頁,共80頁。賦值運(yùn)算符:=, +=, -=, *=, /=, %=, *=, .=, x=, +(左、右), - (左、右)特殊運(yùn)算符:$w?$x:$y如果$w為真,則返回$x;如果$w為假,則返回$y 。($x.$y) 返回從$x到$y之間的值。chop($x)將$x的字符串值的最后一個字符去掉8/20/202212BUPT M

7、ultiMedia Hop Lee第12頁,共80頁。例:#!/usr/bin/perl$folks=100;print $folks = $folks n;print $folks = $folks n;print nn BEEP! a LSOME BLANK ELINES HERE nn;$date = date +%D;print Today is $date n;chop $date;print Date after chopping off carriage return: .$date.n;8/20/202213BUPT MultiMedia Hop Lee第13頁,共80頁。注意

8、實際程序中不應(yīng)該包括行號。其輸出結(jié)果如下:$folks = 100$folks = $folks nBEEP! some blank LINES HEREToday is 03/29/96Date after chopping off carriage return: 03/29/96第3行顯示$folks的值。$之前必須使用換碼符,以便Perl顯示字符串$folks而不是$folks的值100。第4行使用的是單引號,結(jié)果Perl不解釋其中的任何內(nèi)容,只是原封不動地將字符串顯示出來。第6行使用的是(),則date +%D命令的執(zhí)行結(jié)果存儲在標(biāo)量$date 中。8/20/202214BUPT M

9、ultiMedia Hop Lee第14頁,共80頁。上例中使用了一些有特殊意義的字符,下面列出這些字符的含義:n換行。r回車。t制表符。a蜂鳴聲。b Backspace。LE將L和E之間的字符轉(zhuǎn)換成小寫。8/20/202215BUPT MultiMedia Hop Lee第15頁,共80頁。l將其后的字符轉(zhuǎn)換成小寫。U E將U和E之間的字符轉(zhuǎn)換成大寫。u將其后的字符轉(zhuǎn)換成大寫。cC插入控制字符C。x#十六進(jìn)制數(shù)#。0ooo八進(jìn)制數(shù)ooo。 反斜杠。 按原樣輸出下一個字符,例如:$輸出$。8/20/202216BUPT MultiMedia Hop Lee第16頁,共80頁。簡單變量是標(biāo)量,是

10、Perl處理的最簡單的數(shù)據(jù)類型。標(biāo)量可以是數(shù)字(如2,3或2.5e6), 也可以是字符串。8/20/202217BUPT MultiMedia Hop Lee第17頁,共80頁。另外在Perl語言里,我們常會看到my這樣的變量定義,如:my $a = local var;#表示$a是一個程序塊的局部變量。8/20/202218BUPT MultiMedia Hop Lee第18頁,共80頁。三、數(shù)組(列表)數(shù)組(array)是標(biāo)量數(shù)據(jù)的有序列表。每個數(shù)組元素都是具有標(biāo)量值的單獨(dú)的標(biāo)量變量。數(shù)組可以有任意多個元素。數(shù)組變量以開頭。數(shù)組的下標(biāo)從0開始,你可以使用方括號引用數(shù)組的下標(biāo)。8/20/20

11、2219BUPT MultiMedia Hop Lee第19頁,共80頁。數(shù)組常量是位于括號內(nèi)用逗號分開的一系列值,這些值可以是標(biāo)量常量或是表達(dá)式。數(shù)組的元素可以包含“.”運(yùn)算符,這個運(yùn)算符以1為增量創(chuàng)建一個從左邊標(biāo)量值開始到右邊標(biāo)量值結(jié)束的數(shù)值列表。如果右邊的標(biāo)量小于左邊的標(biāo)量則產(chǎn)生空表。如果前后兩個值的差值不是整數(shù),則表尾的元素是不超出范圍的最后一個值。8/20/202220BUPT MultiMedia Hop Lee第20頁,共80頁。數(shù)組運(yùn)算符賦值:=fred=(1,2,3);barney=fred;huh=1;fred=(“one”,”two”);barney=(4,5,fred,

12、6,7);barney=(8,barney);barney=(barney,”last”);8/20/202221BUPT MultiMedia Hop Lee第21頁,共80頁。($a,$b,$c)=(1,2,3);($a,$b)=($b,$a);($d,fred)=($a,$b,$c);($e,fred)=fred;#after that, fred=($c), $e=$b#注意:(fred,$e)=fred;將導(dǎo)致$e為undef如果賦值號兩邊的表中元素數(shù)目不等,則等號右邊任何多出來的值都被截去;等號左邊多出來的變量都被賦為undef。8/20/202222BUPT MultiMedia

13、 Hop Lee第22頁,共80頁。如果把數(shù)組變量賦給標(biāo)量,則標(biāo)量變量的值就是數(shù)組的長度。賦值表達(dá)式的值為數(shù)組變量得到的值:fred=($barney=(2,3,4);fred=barney=(2,3,4);上述兩式結(jié)果相同。8/20/202223BUPT MultiMedia Hop Lee第23頁,共80頁。數(shù)組元素的引用數(shù)組元素的下標(biāo)都是從0開始,增量為1。下標(biāo)運(yùn)算符為。($fred0,$fred1)=($fred1,$fred0);片段(slice):對同一個數(shù)組的一部分元素的訪問可以使用slice表達(dá)式:fred0,1=fred1,0;#對調(diào)8/20/202224BUPT Multi

14、Media Hop Lee第24頁,共80頁。fred0,1,2=fred1,1,1;#將前三個元素都變成第二個元素的值。who=(“fred”,”barney”,”betty”)1,2; #等效于who=(”barney”,”betty”);fred=(7,8,9);barney=(2,1,0);backfred=fredbarney;#(9,8,7)fred=(1,2,3);$fred3=“hi”;$fred6=“ho”;#(1,2,3,”hi”,undef,undef,”ho”)8/20/202225BUPT MultiMedia Hop Lee第25頁,共80頁??梢允褂?#fred來

15、得到數(shù)組fred的末尾元素的索引值;并通過對他賦值來改變數(shù)組fred的長度。push()和pop()運(yùn)算符:push(myarr, $newvalue);$oldvalue=pop(myarr);shift()和unshift()運(yùn)算符類似與push()和pop(),只不過他們是對數(shù)組左邊的元素操作。8/20/202226BUPT MultiMedia Hop Lee第26頁,共80頁。reverse()運(yùn)算符返回數(shù)組元素反序后的結(jié)果,但是不改變參數(shù)。sort()運(yùn)算符將所有參數(shù)都當(dāng)成是ASCII字符串,按升序方式排序,返回排序后的結(jié)果但是不改變原列表。chop()運(yùn)算符可以刪去數(shù)組中每個元素

16、的最后一個字符。8/20/202227BUPT MultiMedia Hop Lee第27頁,共80頁。四、關(guān)聯(lián)數(shù)組關(guān)聯(lián)數(shù)組也是由一系列標(biāo)量數(shù)據(jù)組成的集合,它與列表數(shù)組的區(qū)別是它的索引值不再是非負(fù)的整數(shù)而是任意的標(biāo)量,這些表示索引的標(biāo)量稱為關(guān)鍵字(key)。實際上關(guān)聯(lián)數(shù)組是數(shù)據(jù)結(jié)構(gòu)里的散列表。關(guān)聯(lián)數(shù)組的元素沒有特定的順序。8/20/202228BUPT MultiMedia Hop Lee第28頁,共80頁。關(guān)聯(lián)數(shù)組常量:關(guān)聯(lián)數(shù)組常量由含有偶數(shù)個元素的列表數(shù)組表示:%fred=(“aaa,”bbb”,”234.5”,456.7) 將生成一個含有兩個鍵值對的關(guān)聯(lián)數(shù)組。在展開表中的鍵值對的順序可以

17、是任意的,其在內(nèi)存中的具體順序是由Perl建立的,用于提高訪問單個元素的效率。8/20/202229BUPT MultiMedia Hop Lee第29頁,共80頁。關(guān)聯(lián)數(shù)組變量名以%號開頭。在創(chuàng)建和訪問關(guān)聯(lián)數(shù)組時只需使用對數(shù)組元素的引用即可:關(guān)聯(lián)數(shù)組%arr的每個元素都可被$arr$key引用。關(guān)聯(lián)數(shù)組操作符keys()操作符keys(%arr)將生成由關(guān)聯(lián)數(shù)組%arr中的所有關(guān)鍵字組成的列表數(shù)組。8/20/202230BUPT MultiMedia Hop Lee第30頁,共80頁。其中的圓括號是可選的例:foreach $key(keys %fred) print “at $key we

18、 get $fred$keyn”;在標(biāo)量環(huán)境中,keys()返回關(guān)聯(lián)數(shù)組中鍵值對的個數(shù)。values()操作符values(%arr)返回由%arr中的值構(gòu)成的列表數(shù)組。圓括號是可選的。8/20/202231BUPT MultiMedia Hop Lee第31頁,共80頁。each()操作符each(%arr)返回%arr中的一個鍵值對列表,對同一關(guān)聯(lián)數(shù)組再次使用此操作符將返回下一個鍵值對,當(dāng)處理到數(shù)組的最后一個元素之后,將返回一個空表。例:while($first,$last)=each(%arr)print “The last name of $first is $lastn”;給整個數(shù)組

19、賦新值將使each()操作符重置到數(shù)組的起始位置。8/20/202232BUPT MultiMedia Hop Lee第32頁,共80頁。delete()操作符delete的操作數(shù)是關(guān)聯(lián)數(shù)組的引用。用于刪除指定的鍵值對。8/20/202233BUPT MultiMedia Hop Lee第33頁,共80頁。五、內(nèi)部變量$_缺省的輸入和模式搜索空間$n標(biāo)記寄存器,用于存儲由前面的標(biāo)記正則表達(dá)式匹配的內(nèi)容。只讀。$&最近一個成功匹配的字符串。只讀。$最近一個成功匹配的字符串之前的字符串。只讀。$最近一個成功匹配的字符串之后的字符串。只讀。$.當(dāng)前記錄序號。當(dāng)文件句柄被顯式關(guān)閉時此參數(shù)將被重置為0。

20、$/輸入記錄分隔符。缺省為NewLine。8/20/202234BUPT MultiMedia Hop Lee第34頁,共80頁。$|如果將其值置為非0,則每當(dāng)你向當(dāng)前的輸出通道寫或打印時就將強(qiáng)制flush一下。缺省為0。$,輸出字段分隔符。缺省為空。$輸出記錄分隔符。缺省為空。$”類似于$,,不過應(yīng)用于數(shù)組元素的輸出。缺省為空格。$;模擬多維數(shù)組的下標(biāo)分隔符。缺省為034。8/20/202235BUPT MultiMedia Hop Lee第35頁,共80頁。$#缺省的數(shù)字輸出格式。初始值為%.ng,其中n為系統(tǒng)中float.h文件中宏DBL_DIG的值。$%當(dāng)前輸出通道里的當(dāng)前頁號。$=當(dāng)

21、前輸出通道中每頁能包含的行數(shù),缺省為60。$-當(dāng)前輸出頁中剩余的行數(shù)。$當(dāng)前輸出報告的格式名稱。8/20/202236BUPT MultiMedia Hop Lee第36頁,共80頁。$當(dāng)前頁眉的格式名稱。$:當(dāng)前斷字符。缺省為“n-”。$L輸出換頁符。缺省為f。$正在運(yùn)行當(dāng)前Perl腳本的進(jìn)程ID號。$上述進(jìn)程的有效uid。$(上述進(jìn)程的真實gid。$)上述進(jìn)程的有效gid。8/20/202237BUPT MultiMedia Hop Lee第37頁,共80頁。$0當(dāng)前Perl腳本文件名。$列表數(shù)組的第一個元素的下標(biāo),或者是字符串的第一個字符的下標(biāo),缺省為0。$O當(dāng)前OS名。$T當(dāng)前Perl

22、腳本開始運(yùn)行的時間,表示為epoch之后的秒數(shù)。$X類似于C中的argv0。$ARGV當(dāng)從中讀取數(shù)據(jù)時,表示當(dāng)前數(shù)據(jù)文件名。8/20/202238BUPT MultiMedia Hop Lee第38頁,共80頁。ARGV參數(shù)列表。_函數(shù)的實參列表。局部變量。%ENV環(huán)境變量數(shù)組。%SIG信號數(shù)組,key表示信號類型,value表示要進(jìn)行的處理8/20/202239BUPT MultiMedia Hop Lee第39頁,共80頁。例1:$_ = abcdefghi;/def/;print $:$&:$;#prints abc:def:ghi例2:sub handler # 1st argumen

23、t is signal namemy($sig) = _; print Caught a SIG$sig-shutting downn; close(LOG); exit(0);8/20/202240BUPT MultiMedia Hop Lee第40頁,共80頁。$SIGINT = &handler;$SIGQUIT = &handler;.$SIGINT = DEFAULT; # restore default action$SIGQUIT = IGNORE; # ignore SIGQUIT8/20/202241BUPT MultiMedia Hop Lee第41頁,共80頁。六、流控語

24、句塊:位于一對花括號之間的語句序列。statement;statement;statement;8/20/202242BUPT MultiMedia Hop Lee第42頁,共80頁。if語句:if(expression 1) statements block 1 elsif(expression 2) statements block 2 elsestatements block nunless語句:unless=if not8/20/202243BUPT MultiMedia Hop Lee第43頁,共80頁。控制表達(dá)式expression是作為字符串計算的,如果是空串或只包括單個字符“0

25、”,則表達(dá)式為假,否則為真。例:0# false1-1# false1# true“”# false“1”# true“00”# true“0.000”# trueundef# false8/20/202244BUPT MultiMedia Hop Lee第44頁,共80頁。while語句:while(expressions) statements blockuntil語句:until(expressions) statement block8/20/202245BUPT MultiMedia Hop Lee第45頁,共80頁。for語句:for(expr1; expr2; expr3)sta

26、tement blockforeach語句:foreach $var (arr_expr) statement block8/20/202246BUPT MultiMedia Hop Lee第46頁,共80頁。arr_expr可以是任意表達(dá)式。如果arr_expr是單個數(shù)組變量的引用,那么在循環(huán)體中對$var的修改將直接作用于相應(yīng)的數(shù)組元素。即這時是byref引用。例:a=(3,5,7,9)foreach $one (a) $one *= 3;# now a is (9,15,21,27)8/20/202247BUPT MultiMedia Hop Lee第47頁,共80頁。last終止最近的

27、封閉循環(huán)塊例:while(expr) statement blocklast;# last to here8/20/202248BUPT MultiMedia Hop Lee第48頁,共80頁。next跳過最近的封閉循環(huán)塊中的剩余部分,進(jìn)行下一次循環(huán)例:while(expr) statement block 1next;statement block 2# next to here8/20/202249BUPT MultiMedia Hop Lee第49頁,共80頁。redo跳到當(dāng)前循環(huán)塊的最開始位置例:while(expr) # redo to herestatement blockredo

28、;8/20/202250BUPT MultiMedia Hop Lee第50頁,共80頁。label block使用label給語句塊起一個名字,用于last和next語句使用標(biāo)號只能跳出,不能跳入8/20/202251BUPT MultiMedia Hop Lee第51頁,共80頁。表達(dá)式簡寫方式1(倒置)exp2 if exp1;exp2 unless exp1;exp2 while exp1;exp2 until exp1;先對exp1求值,并據(jù)此判斷是否執(zhí)行exp28/20/202252BUPT MultiMedia Hop Lee第52頁,共80頁。表達(dá)式簡寫方式2(&,|,?:)e

29、xp1 & exp2;#if(exp1)exp2;exp1 | exp2;#unless(exp1)exp2;exp1 ? exp2 : exp3; if(exp1) exp2; else exp3;8/20/202253BUPT MultiMedia Hop Lee第53頁,共80頁。七、基本I/OSTDIN使用操作符表示從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),直到遇到$/為止。和類似,但是可以從Perl的命令行參數(shù)文件名指定的輸入文件中讀取記錄。8/20/202254BUPT MultiMedia Hop Lee第54頁,共80頁。STDOUTprint()操作符,返回成功(1)或失敗(0)printf(fm

30、t_str, value_list),類似于C和awk中的格式。8/20/202255BUPT MultiMedia Hop Lee第55頁,共80頁。八、文件操作文件句柄已經(jīng)見過的有STDIN,STDOUT,STDERR文件句柄的打開和關(guān)閉open(FILEHANDLE,”file_name”);表示以讀寫覆蓋方式打開文件。close(FILEHANDLE);關(guān)閉文件句柄。8/20/202256BUPT MultiMedia Hop Lee第56頁,共80頁。die()操作符在可選的圓括號里帶有一列表,以標(biāo)準(zhǔn)錯誤的方式輸出該列表,然后以非零的UNIX退出狀態(tài)結(jié)束該P(yáng)erl進(jìn)程。如果die()

31、的列表的最后沒有一個n,則退出時的信息中自動帶有Perl程序的名字及行數(shù)。8/20/202257BUPT MultiMedia Hop Lee第57頁,共80頁。例:open(IN,$a)|die “Cannot open $a for reading.”;open(OUT,”$b”)|die “Cannot create $b.”;while()print OUT $_;close(OUT);close(IN);8/20/202258BUPT MultiMedia Hop Lee第58頁,共80頁。文件測試:-rReadable for euid-wWritablefor euid-xExe

32、cutable for euid-oOwner by euid-RReadable for ruid-WWritable for ruid-XExecutable for ruid-OOwner by ruid8/20/202259BUPT MultiMedia Hop Lee第59頁,共80頁。-eExist-zExist and size=zero-sExist and size!=zero-fPure file-dDirectory-lLink file-SSocket-pNamed pipe8/20/202260BUPT MultiMedia Hop Lee第60頁,共80頁。-bBl

33、ock device file-cCharacter device file-uNuid is N-gNgid is N-kHas sticky bit-tisatty() is true-TText file-BBinary file8/20/202261BUPT MultiMedia Hop Lee第61頁,共80頁。-MUp to todays time in days from LMT, precession in second-Afrom LAT-Cfrom inode changed timestat()和lstat()操作符Stat()的操作數(shù)是一個文件句柄,返回值是有13個元素

34、的數(shù)組:8/20/202262BUPT MultiMedia Hop Lee第62頁,共80頁。($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat();$devdevice$inoinode$modeaccess mode$nlinknumber of hard links$uiduser id of owner8/20/202263BUPT MultiMedia Hop Lee第63頁,共80頁。$gidgroup id of owner

35、$rdevdevice type (if inode device)$sizetotal size, in bytes$atimelast access time$mtimelast modification time$ctimelast change time$blksizeblock size for file system I/O$blocksnumber of blocks allocated8/20/202264BUPT MultiMedia Hop Lee第64頁,共80頁。例:studentApple Perl$ ./stat.pl 0 dev 773 1 ino 95268 2

36、 mode 33277 3 nlink 1 4 uid 500 5 gid 500 6 rdev 0 7 size 14350 8 atime 1038893994 9 mtime 1038893994 10 ctime 1038893994 11 blksize 4096 12 blocks 328/20/202265BUPT MultiMedia Hop Lee第65頁,共80頁。studentApple Perl$ ls -l code-rwxrwxr-x 1 student student 14350 12 3 13:39 codestudentApple Perl$ more sta

37、t.pl #!/usr/bin/perlarr1=(dev, ino, mode, nlink, uid, gid, rdev, size, atime, mtime, ctime, blksize, blocks);arr=stat(/home/student/Examples/Perl/code);for($i = 0; $i code8/20/202267BUPT MultiMedia Hop Lee第67頁,共80頁。studentApple$ ./stat.pl 0 dev 773 1 ino 95268 2 mode 33277 3 nlink 1 4 uid 500 5 gid

38、500 6 rdev 0 7 size 14350 8 atime 1038893994 9 mtime 1038893994 10 ctime 1038894348 11 blksize 4096 12 blocks 32studentApple$ ./lstat.pl 0 dev 773 1 ino 95269 2 mode 41471 3 nlink 1 4 uid 500 5 gid 500 6 rdev 0 7 size 4 8 atime 1038894488 9 mtime 1038894357 10 ctime 1038894357 11 blksize 4096 12 blo

39、cks 08/20/202268BUPT MultiMedia Hop Lee第68頁,共80頁。每次進(jìn)行文件測試操作時,Perl都將向系統(tǒng)申請一個該文件的stat緩沖區(qū)。在指定的_文件句柄上進(jìn)行文件操作就可以讓Perl直接使用前一次文件測試的緩沖區(qū)。例:if(-r $filevar & -w_) print “$filevar is both readable and writable.n”;8/20/202269BUPT MultiMedia Hop Lee第69頁,共80頁。九、格式Perl提供了簡單的報告書寫模板的概念,叫做格式(format)。Format定義了常量部分(每列的開頭、

40、標(biāo)簽、相應(yīng)的正文或其它)以及變量部分(報告中的數(shù)據(jù))。使用格式需要做三件事:定義格式提取數(shù)據(jù),將其打印到格式的變量部分申請格式8/20/202270BUPT MultiMedia Hop Lee第70頁,共80頁。定義格式格式定義可以出現(xiàn)在程序中的任何位置:format fmt_name = FORMLIST.8/20/202271BUPT MultiMedia Hop Lee第71頁,共80頁。第一行包括保留字format,以及該格式的名稱(缺省為STDOUT)和一個等號。下面是“模板”本身,可以有任意行文本。每一行文本都應(yīng)該是下述三種之一:第一列以#開頭的注釋格式字符串給出每個輸出行的格式

41、用于匹配格式字符串的參數(shù)列表8/20/202272BUPT MultiMedia Hop Lee第72頁,共80頁。格式字符串中的普通文本原樣輸出。以開頭的是字段格式,在字段格式中的字符,|分別表示左、右和中央對齊。字符的個數(shù)表明了相應(yīng)參數(shù)的輸出值的寬度,如果值的寬度過大,將被截斷,過小則填充空格。8/20/202273BUPT MultiMedia Hop Lee第73頁,共80頁。例:studentApple Perl$ more passwd_report.pl#!/usr/bin/perl# a report on the /etc/passwd fileformat PWDLIST_TOP = Passwd File Page $%No. Name Login Office Uid Gid Home.format PWDLIST = passwd_report) | die Cant create output file.;open(PWDFILE, /etc/passwd) | die Cant open data file.;# Change the pa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論