一,、進程處理函數(shù)
1、進程啟動函數(shù)
函數(shù)名 eval
調(diào)用語法 eval(string) 解說 將string看作Perl語句執(zhí)行,。 正確執(zhí)行后,,系統(tǒng)變量$@為空串,如果有錯誤,,$@中為錯誤信息,。 例子 $print = "print (\"hello,world\\n\");"; eval ($print); 結(jié)果輸出 hello, world
函數(shù)名 system
調(diào)用語法 system(list) 解說 list中第一個元素為程序名,其余為參數(shù),。 system啟動一個進程運行程序并等待其結(jié)束,,程序結(jié)束后錯誤代碼左移八位成為返回值。
例子 @proglist = ("echo", "hello,world!"); system(@proglist); 結(jié)果輸出 hello, world!
函數(shù)名 fork
調(diào)用語法 procid = fork(); 解說 創(chuàng)建程序的兩個拷貝--父進程和子進程--同時運行,。子進程返回零,,父進程返回非零 值,此值為子程序的進程ID號,。 例子 $retval = fork(); if ($retval == 0) { # this is the child process exit; # this terminates the child process } else { # this is the parent process } 結(jié)果輸出 無
函數(shù)名 pipe
調(diào)用語法 pipe (infile, outfile); 解說 與fork合用,,給父進程和子進程提供通信的方式。送到outfile文件變量的信息可以 通過infile文件變量讀取,。步驟: 1,、調(diào)用pipe 2,、用fork將程序分成父進程和子進程 3、一個進程關(guān)掉infile,,另一個關(guān)掉outfile 例子 pipe (INPUT, OUTPUT); $retval = fork(); if ($retval != 0) { # this is the parent process close (INPUT); print ("Enter a line of input:\n"); $line = <STDIN>; print OUTPUT ($line); } else { # this is the child process close (OUTPUT); $line = <INPUT>; print ($line); exit (0); }
結(jié)果輸出 $ program Enter a line of input: Here is a test line Here is a test line $
函數(shù)名 exec
調(diào)用語法 exec (list); 解說 與system類似,,區(qū)別是啟動新進程前結(jié)束當(dāng)前程序。常與fork合用,,當(dāng)fork分成兩個 進程后,,子進程用exec啟動另一個程序。 例子 結(jié)果輸出
函數(shù)名 syscall
調(diào)用語法 syscall (list); 解說 調(diào)用系統(tǒng)函數(shù),,list第一個元素是系統(tǒng)調(diào)用名,,其余為參數(shù)。 如果參數(shù)是數(shù)字,,就轉(zhuǎn)化成C的整型數(shù)(type int),。否則傳遞字符串的指針。詳見UNIX的幫助Perl文檔,。 使用syscall必須包含文件syscall.pl,,即: require ("syscall.ph"); 例子 結(jié)果輸出 2、進程終止函數(shù)
函數(shù)名 die
調(diào)用語法 die (message); 解說 終止程序并向STDERR輸出錯誤信息,。message可以為字符串或列表,。如果最后一個參 數(shù)不包含換行符,則程序文件名和行號也被輸出,。 例子 die ("Cannot open input file"); 結(jié)果輸出 Cannot open input file at myprog line 6.
函數(shù)名 warn
調(diào)用語法 warn (message); 解說 與die類似,,區(qū)別是不終止程序。 例子 warn("Danger! Danger!\n"); 結(jié)果輸出 Danger! Danger!
函數(shù)名 exit
調(diào)用語法 exit (retcode); 解說 終止程序并指定返回值,。 例子 exit(2); 結(jié)果輸出 無
函數(shù)名 kill
調(diào)用語法 kill (signal, proclist); 解說 給一組進程發(fā)送信號,。 signal是發(fā)送的數(shù)字信號,9為殺掉進程,。 proclist是進程ID列表,。詳見kill的UNIX幫助。 例子 結(jié)果輸出
3,、進程控制函數(shù)
函數(shù)名 sleep
調(diào)用語法 sleep (time); 解說 將程序暫停一段時間,。time是停止的秒數(shù)。返回值為實際停止的秒數(shù),。 例子 sleep (5); 結(jié)果輸出 無
函數(shù)名 wait
調(diào)用語法 procid = wait(); 解說 暫停程序執(zhí)行,等待子進程終止,。 不需要參數(shù),,返回值為子進程ID,如果沒有子進程,,返回-1,。 例子 結(jié)果輸出
函數(shù)名 waitpid
調(diào)用語法 waitpid (procid, waitflag); 解說 暫停程序執(zhí)行,,等待特定的子進程終止。procid為等待的進程ID 例子 $procid = fork(); if ($procid == 0) { # this is the child process print ("this line is printed first\n"); exit(0); } else { # this is the parent process waitpid ($procid, 0); print ("this line is printed last\n"); } 結(jié)果輸出 $ program this line is printed first this line is printed last $
4,、其它控制函數(shù)
函數(shù)名 caller
調(diào)用語法 subinfo = caller(); 解說 返回調(diào)用者的程序名和行號,,用于Perl Debugger。 返回值為三元素的列表: 1,、調(diào)用處的包名 2,、調(diào)用者文件名 3、調(diào)用處的行號 例子 結(jié)果輸出
函數(shù)名 chroot
調(diào)用語法 chroot (dir); 解說 改變程序的根目錄,,詳見chroot幫助,。 例子 結(jié)果輸出
函數(shù)名 local
調(diào)用語法 local($variable); 解說 在語句塊(由大括號包圍的語句集合)中定義局域變量,僅在此語句塊中起作用,,對其 的改變不對塊外同名變量造成影響,。 千萬不要在循環(huán)中使用,否則每次循環(huán)都定義一個新的局域變量,! 例子 結(jié)果輸出
函數(shù)名 times
調(diào)用語法 timelist = times 解說 返回該程序及所有子進程消耗的工作時間,。 返回值為四個浮點數(shù)的列表: 1、程序耗用的用戶時間 2,、程序耗用的系統(tǒng)時間 3,、子進程耗用的用戶時間 4、子進程耗用的系統(tǒng)時間 例子 結(jié)果輸出
二,、數(shù)學(xué)函數(shù)
函數(shù)名 sin
調(diào)用語法 retval = sin (value); 解說 參數(shù)為弧度值,。
函數(shù)名 cos
調(diào)用語法 retval = cos (value); 解說 參數(shù)為弧度值。
函數(shù)名 atan2
調(diào)用語法 retval = atan2 (value1, value2); 解說 運算并返回value1除以value2結(jié)果的arctan值,,單位為弧度,,范圍在-PI~PI。 應(yīng)用例: 角度轉(zhuǎn)化成弧度子程序,。 sub degrees_to_radians { local ($degrees) = @_; local ($radians);11: $radians = atan2(1,1) * $degrees / 45; }
函數(shù)名 sqrt
調(diào)用語法 retval = sqrt (value); 解說 平方根函數(shù),。value為非負(fù)數(shù)。
函數(shù)名 exp
調(diào)用語法 retval = exp (value); 解說 返回e的value次方,。
函數(shù)名 log 調(diào)用語法 retval = log (value); 解說 以e為底的自然對數(shù),。
函數(shù)名 abs 調(diào)用語法 retval = abs (value); 解說 絕對值函數(shù)。(Perl 4中沒有)
函數(shù)名 rand 調(diào)用語法 retval = rand (num); 解說 隨機數(shù)函數(shù),,返回0和整數(shù)num之間的一個浮點數(shù),。
函數(shù)名 srand 調(diào)用語法 srand (value); 解說 初始化隨機數(shù)生成器。保證每次調(diào)用rand真正隨機,。
三,、字符串處理函數(shù)
函數(shù)名 index 調(diào)用語法 position = index (string, substring, position); 解說 返回子串substring在字符串string中的位置,如果不存在則返回-1,。參數(shù)position 是可選項,,表示匹配之前跳過的字符數(shù),,或者說從該位置開始匹配。
函數(shù)名 rindex 調(diào)用語法 position = rindex (string, substring, position); 解說 與index類似,,區(qū)別是從右端匹配,。
函數(shù)名 length 調(diào)用語法 num = length (string); 解說 返回字符串長度,或者說含有字符的數(shù)目,。
函數(shù)名 pos 調(diào)用語法 offset = pos(string); 解說 返回最后一次模式匹配的位置,。
函數(shù)名 substr 調(diào)用語法 substr (expr, skipchars, length) 解說 抽取字符串(或表達式生成的字符串)expr中的子串,跳過skipchars個字符,,或者 說從位置skipchars開始抽取子串(第一個字符位置為0),,子串長度為length,,此參數(shù)可 忽略,,意味著取剩下的全部字符,。 當(dāng)此函數(shù)出現(xiàn)在等式左邊時,expr必須為變量或數(shù)組元素,,此時其中部分子串被等式右邊 的值替換,。
函數(shù)名 study 調(diào)用語法 study (scalar); 解說 用一種內(nèi)部格式提高變量的訪問速度,同一時刻只對一個變量起作用,。
函數(shù)名 lc uc 調(diào)用語法 retval = lc(string); retval = uc(string); 解說 將字符串全部轉(zhuǎn)換成小/大寫字母,。
函數(shù)名 lcfirst ucfirst 調(diào)用語法 retval = lcfirst(string); retval = ucfirst(string); 解說 將第一個字母轉(zhuǎn)換成小/大寫。
函數(shù)名 quotameta
調(diào)用語法 newstring = quotemeta(oldstring); 解說 將非單詞的字母前面加上反斜線(\),。 語句 : $string = quotemeta($string); 等效于:$string =~ s/(\W)/\\$1/g; 常用于模式匹配操作中,,確保字符串中沒有字符被看作匹配操作符。
函數(shù)名 join
調(diào)用語法 join (joinstr, list); 解說 把字符串列表(數(shù)組)組合成一個長的字符串,,在每兩個列表元素間插入串joinstr,。
函數(shù)名 sprintf
調(diào)用語法 sprintf (string, fields); 解說 與printf類似,區(qū)別是結(jié)果不輸出到文件,,而作為返回值賦給變量,。 例子 $num = 26; $outstr = sprintf("%d = %x hexadecimal or %o octal\n",$num, $num, $num); print ($outstr); 結(jié)果輸出 26 = 1a hexadecimal or 32 octal
四、標(biāo)量轉(zhuǎn)換函數(shù)
函數(shù)名 chop
調(diào)用語法 $lastchar = chop (var); 解說 var可為變量或數(shù)組,,當(dāng)var為變量時,,最后一個字符被刪除并賦給$lastchar,當(dāng)va r為數(shù)組/列表時,,所有元素的最后一個字符被刪除,,最后一個元素的最后一個字母賦給$l astchar。
函數(shù)名 chomp
調(diào)用語法 result = chomp(var); 解說 檢查字符串或字符串列表中元素的最后一個字符是否為由系統(tǒng)變量$/定義的行分隔符 ,,如果是就刪除,。返回值為實際刪除的字符個數(shù)。
函數(shù)名 crypt
調(diào)用語法 result = crypt (original, salt); 解說 用DES算法加密字符串,original是將要加密的字符串,,salt是兩個字符的字符串, 定義如何改變DES算法,,以使更難解碼,。返回值為加密后的串。
函數(shù)名 hex
調(diào)用語法 decnum = hex (hexnum); 解說 將十六進制數(shù)(字符串形式)轉(zhuǎn)化為十進制數(shù),。
函數(shù)名 int
調(diào)用語法 intnum = int (floatnum); 解說 將浮點數(shù)舍去小數(shù)部分轉(zhuǎn)化為整型數(shù),。
函數(shù)名 oct
調(diào)用語法 decnum = oct (octnum); 解說 將八進制數(shù)(字符串形式)或十六進制數(shù)("0x.."形式)轉(zhuǎn)化為十進制數(shù)。
函數(shù)名 ord
調(diào)用語法 asciival = ord (char); 解說 返回單個字符的ASCII值,,與PASCAL中同名函數(shù)類似,。
函數(shù)名 chr
調(diào)用語法 $char = chr (asciival); 解說 返回ASCII值的相應(yīng)字符,與PASCAL中同名函數(shù)類似,。
函數(shù)名 pack
調(diào)用語法 formatstr = pack(packformat, list); 解說 把一個列表或數(shù)組以在實際機器存貯格式或C等編程語言使用的格式轉(zhuǎn)化(包裝)到 一個簡單變量中,。參數(shù)packformat包含一個或多個格式字符,列表中每個元素對應(yīng)一個,, 各格式字符間可用空格或tab隔開,,因為pack忽略空格。 除了格式a,、A和@外,,重復(fù)使用一種格式多次可在其后加個整數(shù),如: $twoints = pack ("i2", 103, 241); 把同一格式應(yīng)用于所有的元素則加個*號,,如: $manyints = pack ("i*", 14, 26, 11, 83); 對于a和A而言,,其后的整數(shù)表示要創(chuàng)建的字符串長度,重復(fù)方法如下: $strings = pack ("a6" x 2, "test1", "test2"); 格式@的情況比較特殊,,其后必須加個整數(shù),,該數(shù)表示字符串必須的長度,如果長度不夠 ,,則用空字符(null)補足,,如: $output = pack ("a @6 a", "test", "test2"); pack函數(shù)最常見的用途是創(chuàng)建可與C程序交互的數(shù)據(jù),例如C語言中字符串均以空字符(n ull)結(jié)尾,,創(chuàng)建這樣的數(shù)據(jù)可以這樣做: $Cstring = pack ("ax", $mystring); 下表是一些格式字符與C中數(shù)據(jù)類型的等價關(guān)系:
字符 等價C數(shù)據(jù)類型 C char d double f float i int I unsigned int (or unsigned) l long L unsigned long s short S unsigned short
完整的格式字符見下表,。
格式字符 描述 a 用空字符(null)補足的字符串 A 用空格補足的字符串 b 位串,低位在前 B 位串,,高位在前 c 帶符號字符(通常-128~127) C 無符號字符(通常8位) d 雙精度浮點數(shù) f 單精度浮點數(shù) h 十六進制數(shù)串,,低位在前 H 十六進制數(shù)串,高位在前 i 帶符號整數(shù) I 無符號整數(shù) l 帶符號長整數(shù) L 無符號長整數(shù) n 網(wǎng)絡(luò)序短整數(shù) N 網(wǎng)絡(luò)序長整數(shù) p 字符串指針 s 帶符號短整數(shù) S 無符號短整數(shù) u 轉(zhuǎn)化成uuencode格式 v VAX序短整數(shù) V VAX序長整數(shù) x 一個空字節(jié) X 回退一個字節(jié) @ 以空字節(jié)(null)填充
函數(shù)名 unpack
調(diào)用語法 @list = unpack (packformat, formatstr); 解說 unpack與pack功能相反,,將以機器格式存貯的值轉(zhuǎn)化成Perl中值的列表,。其格式字符 與pack基本相同(即上表),不同的有:A格式將機器格式字符串轉(zhuǎn)化為Perl字符串并去掉 尾部所有空格或空字符;x為跳過一個字節(jié),;@為跳過一些字節(jié)到指定的位置,,如@4為跳過 4個字節(jié)。下面看一個@和X合同的例子: $longrightint = unpack ("@* X4 L", $pac kstring); 此語句將最后四個字節(jié)看作無符號長整數(shù)進行轉(zhuǎn)化,。下面看一個對uuencode文件解碼的 例子:
#!/usr/local/bin/perl
open (CODEDFILE, "/u/janedoe/codefile") || die ("Can't open input file"); open (OUTFILE, ">outfile") || die ("Can't open output file"); while ($line = <CODEDFILE>) { $decoded = unpack("u", $line); print OUTFILE ($decoded); } close (OUTFILE); close (CODEDFILE);
當(dāng)將pack和unpack用于uuencode時,,要記住,雖然它們與UNIX中的uuencode,、uudecode 工具算法相同,,但并不提供首行和末行,如果想用uudecode對由pack的輸出創(chuàng)建的文件進 行解碼,,必須也把首行和末行輸出(詳見UNIX中uuencode幫助),。
函數(shù)名 vec
調(diào)用語法 retval = vec (vector, index, bits); 解說 顧名思義,vec即矢量(vector)函數(shù),,它把簡單變量vector的值看作多塊(維)數(shù)據(jù),, 每塊含一定數(shù)目的位,合起來即一個矢量數(shù)據(jù),。每次的調(diào)用訪問其中一塊數(shù)據(jù),,可以讀取 ,也可以寫入,。參數(shù)index就象數(shù)組下標(biāo)一樣,,提出訪問哪一塊,0為第一塊,,依次類推,, 要注意的是訪問次序是從右到左的,即第一塊在最右邊,。參數(shù)bits指定每塊中的位數(shù),,可 以為1,2,4,8,16或32。
例子
#!/usr/local/bin/perl
$vector = pack ("B*", "11010011"); $val1 = vec ($vector, 0, 4); $val2 = vec ($vector, 1, 4); print ("high-to-low order values: $val1 and $val2\n"); $vector = pack ("b*", "11010011"); $val1 = vec ($vector, 0, 4); $val2 = vec ($vector, 1, 4); print ("low-to-high order values: $val1 and $val2\n");
結(jié)果 high-to-low order values: 3 and 13 low-to-high order values: 11 and 12
函數(shù)名 defined
調(diào)用語法 retval = defined (expr); 解說 判斷一個變量,、數(shù)組或數(shù)組的一個元素是否已經(jīng)被賦值,。expr為變量名、數(shù)組名或一 個數(shù)組元素,。 如果已定義,,返回真,否則返回假,。
函數(shù)名 undef
調(diào)用語法 retval = undef (expr); 解說 取消變量,、數(shù)組或數(shù)組元素甚至子程序的定義,回收其空間,。返回值始終為未定義值 ,,此值與空串等效。
五、數(shù)組和列表函數(shù)
函數(shù)名 grep 調(diào)用語法 @foundlist = grep (pattern, @searchlist); 解說 與同名的UNIX查找工具類似,,grep函數(shù)在列表中抽取與指定模式匹配的元素,,參數(shù)p attern為欲查找的模式,返回值是匹配元素的列表,。 例子 @list = ("This", "is", "a", "test"); @foundlist = grep(/^[tT]/, @list); 結(jié)果 @foundlist = ("This", "test");
函數(shù)名 splice
調(diào)用語法 @retval = splice (@array, slipelements, length, @newlist); 解說 拼接函數(shù)可以向列表(數(shù)組)中間插入元素,、刪除子列表或替換子列表。參數(shù)ski pelements是拼接前跳過的元素數(shù)目,,length是被替換的元素數(shù),newlist是將要拼接進來 的列表,。當(dāng)newlist的長度大于length時,,后面的元素自動后移,反之則向前縮進,。因此,, 當(dāng)length=0時,就相當(dāng)于向列表中插入元素,,而形如語句 splice (@array, -1, 0, "Hello"); 則向數(shù)組末尾添加元素,。而當(dāng)newlist為空時就相當(dāng)于刪除子列表,這時,,如果length為空 ,,就從第skipelements個元素后全部刪除,而刪除最后一個元素則為:splice (@array, -1);這種情況下,,返回值為被刪去的元素列表,。
函數(shù)名 shift 調(diào)用語法 element = shift (@arrayvar); 解說 刪去數(shù)組第一個元素,剩下元素前移,,返回被刪去的元素,。不加參數(shù)時,缺省地對@ ARGV進行操作,。
函數(shù)名 unshift
調(diào)用語法 count = unshift (@arrayver, elements); 解說 作用與shift相反,,在數(shù)組arrayvar開頭增加一個或多個元素,返回值為結(jié)果(列表) 的長度,。等價于splice (@array, 0, 0, elements);
函數(shù)名 push
調(diào)用語法 push (@arrayvar, elements); 解說 在數(shù)組末尾增加一個或多個元素,。等價于slice (@array, @array, 0, elements);
函數(shù)名 pop
調(diào)用語法 element = pop (@arrayvar); 解說 與push作用相反,刪去列表最后一個元素,,并將其作為返回值,,當(dāng)列表已空,則返回 “未定義值”(即空串),。
函數(shù)名 split
調(diào)用語法 @list = split (pattern, string, maxlength); 解說 將字符串分割成一組元素的列表,。每匹配一次pattern,就開始一個新元素,但patt ern本身不包含在元素中,。maxlength是可選項,,當(dāng)指定它時,達到該長度就不再分割,。
函數(shù)名 sort
調(diào)用語法 @sorted = sort (@list); 解說 按字母次序給列表排序,。
函數(shù)名 reverse
調(diào)用語法 @reversed = reverse (@list); 解說 按字母反序給列表排序。
函數(shù)名 map
調(diào)用語法 @resultlist = map (expr, @list); 解說 此函數(shù)在Perl5中定義,,可以把列表中的各個元素作為表達式expr的操作數(shù)進行運算 ,,其本身不改變,結(jié)果作為返回值,。在表達式expr中,,系統(tǒng)變量$_代表各個元素。 例子 1,、@list = (100, 200, 300); @results = map ($_+1, @list); 2,、@results = map (&mysub($_), @list); 結(jié)果 1、(101, 201, 301) 2,、無
函數(shù)名 wantarray
調(diào)用語法 result = wantarray(); 解說 Perl中,,一些內(nèi)置函數(shù)的行為根據(jù)其處理簡單變量還是數(shù)組有所不同,如chop,。自定 義的子程序也可以定義這樣兩種行為,。當(dāng)子程序被期望返回列表時,此函數(shù)返回值為非零 值(真),,否則為零值(假),。 例子
#!/usr/local/bin/perl
@array = &mysub(); $scalar = &mysub();
sub mysub { if (wantarray()) { print ("true\n"); } else { print ("false\n"); } }
結(jié)果 $program true false $
六、關(guān)聯(lián)數(shù)組函數(shù)
函數(shù)名 keys
調(diào)用語法 @list = keys (%assoc_array); 解說 返回關(guān)聯(lián)數(shù)組無序的下標(biāo)列表,。
函數(shù)名 values
調(diào)用語法 @list = values (%assoc_array); 解說 返回關(guān)聯(lián)數(shù)組無序的值列表,。
函數(shù)名 each
調(diào)用語法 @pair = each (%assoc_array); 解說 返回兩個元素的列表--鍵值對(即下標(biāo)和相應(yīng)的值),,同樣無序,。當(dāng)關(guān)聯(lián)數(shù)組已空, 則返回空列表,。
函數(shù)名 delete
調(diào)用語法 element = delete (assoc_array_item); 解說 刪除關(guān)聯(lián)數(shù)組中的元素,,并將其值作為返回值。 例子 %array = ("foo", 26, "bar", 17"); $retval = delete ($array{"foo"}); 結(jié)果 $retval = 26;
函數(shù)名 exists
調(diào)用語法 result = exists (element); 解說 在Perl5中定義,,判斷關(guān)聯(lián)數(shù)組中是否存在某元素,,若存在,返回非零值(真),,否則 返回零值(假),。 例子 $result = exists ($myarray{$mykey});
|