附錄一 函數(shù)集
一、進(jìn)程處理函數(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啟動一個進(jìn)程運(yùn)行程序并等待其結(jié)束,程序結(jié)束后錯誤代碼左移八位成為返回值。 |
例子 | @proglist = ("echo", "hello,world!"); system(@proglist); |
結(jié)果輸出 | hello, world! |
函數(shù)名 | fork |
調(diào)用語法 | procid = fork(); |
解說 | 創(chuàng)建程序的兩個拷貝--父進(jìn)程和子進(jìn)程--同時運(yùn)行。子進(jìn)程返回零,父進(jìn)程返回非零值,此值為子程序的進(jìn)程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合用,給父進(jìn)程和子進(jìn)程提供通信的方式。送到outfile文件變量的信息可以通過infile文件變量讀取。步驟: 1、調(diào)用pipe 2、用fork將程序分成父進(jìn)程和子進(jìn)程 3、一個進(jìn)程關(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ū)別是啟動新進(jìn)程前結(jié)束當(dāng)前程序。常與fork合用,當(dāng)fork分成兩個進(jìn)程后,子進(jìn)程用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é)果輸出 |
函數(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); |
解說 | 給一組進(jìn)程發(fā)送信號。 signal是發(fā)送的數(shù)字信號,9為殺掉進(jìn)程。 proclist是進(jìn)程ID列表。詳見kill的UNIX幫助。 |
例子 | |
結(jié)果輸出 |
函數(shù)名 | sleep |
調(diào)用語法 | sleep (time); |
解說 | 將程序暫停一段時間。time是停止的秒數(shù)。返回值為實(shí)際停止的秒數(shù)。 |
例子 | sleep (5); |
結(jié)果輸出 | 無 |
函數(shù)名 | wait |
調(diào)用語法 | procid = wait(); |
解說 | 暫停程序執(zhí)行,等待子進(jìn)程終止。 不需要參數(shù),返回值為子進(jìn)程ID,如果沒有子進(jìn)程,返回-1。 |
例子 | |
結(jié)果輸出 |
函數(shù)名 | waitpid |
調(diào)用語法 | waitpid (procid, waitflag); |
解說 | 暫停程序執(zhí)行,等待特定的子進(jìn)程終止。procid為等待的進(jìn)程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 $ |
函數(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 |
解說 | 返回該程序及所有子進(jìn)程消耗的工作時間。 返回值為四個浮點(diǎn)數(shù)的列表: 1、程序耗用的用戶時間 2、程序耗用的系統(tǒng)時間 3、子進(jìn)程耗用的用戶時間 4、子進(jìn)程耗用的系統(tǒng)時間 |
例子 | |
結(jié)果輸出 |
函數(shù)名 | sin |
調(diào)用語法 | retval = sin (value); |
解說 | 參數(shù)為弧度值。 |
函數(shù)名 | cos |
調(diào)用語法 | retval = cos (value); |
解說 | 參數(shù)為弧度值。 |
函數(shù)名 | atan2 |
調(diào)用語法 | retval = atan2 (value1, value2); |
解說 | 運(yùn)算并返回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); |
解說 | 隨機(jī)數(shù)函數(shù),返回0和整數(shù)num之間的一個浮點(diǎn)數(shù)。 |
函數(shù)名 | srand |
調(diào)用語法 | srand (value); |
解說 | 初始化隨機(jī)數(shù)生成器。保證每次調(diào)用rand真正隨機(jī)。 |
函數(shù)名 | index |
調(diào)用語法 | position = index (string, substring, position); |
解說 | 返回子串substring在字符串string中的位置,如果不存在則返回-1。參數(shù)position是可選項(xiàng),表示匹配之前跳過的字符數(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) |
解說 | 抽取字符串(或表達(dá)式生成的字符串)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 |
函數(shù)名 | chop |
調(diào)用語法 | $lastchar = chop (var); |
解說 | var可為變量或數(shù)組,當(dāng)var為變量時,最后一個字符被刪除并賦給$lastchar,當(dāng)var為數(shù)組/列表時,所有元素的最后一個字符被刪除,最后一個元素的最后一個字母賦給$lastchar。 |
函數(shù)名 | chomp |
調(diào)用語法 | result = chomp(var); |
解說 | 檢查字符串或字符串列表中元素的最后一個字符是否為由系統(tǒng)變量$/定義的行分隔符,如果是就刪除。返回值為實(shí)際刪除的字符個數(shù)。 |
函數(shù)名 | crypt |
調(diào)用語法 | result = crypt (original, salt); |
解說 | 用DES算法加密字符串,original是將要加密的字符串,salt是兩個字符的字符串,定義如何改變DES算法,以使更難解碼。返回值為加密后的串。 |
函數(shù)名 | hex |
調(diào)用語法 | decnum = hex (hexnum); |
解說 | 將十六進(jìn)制數(shù)(字符串形式)轉(zhuǎn)化為十進(jìn)制數(shù)。 |
函數(shù)名 | int |
調(diào)用語法 | intnum = int (floatnum); |
解說 | 將浮點(diǎn)數(shù)舍去小數(shù)部分轉(zhuǎn)化為整型數(shù)。 |
函數(shù)名 | oct |
調(diào)用語法 | decnum = oct (octnum); |
解說 | 將八進(jìn)制數(shù)(字符串形式)或十六進(jìn)制數(shù)("0x.."形式)轉(zhuǎn)化為十進(jì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ù)組以在實(shí)際機(jī)器存貯格式或C等編程語言使用的格式轉(zhuǎn)化(包裝)到一個簡單變量中。參數(shù)packformat包含一個或多個格式字符,列表中每個元素對應(yīng)一個,各格式字符間可用空格或tab隔開,因?yàn)閜ack忽略空格。 除了格式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)補(bǔ)足,如: $output = pack ("a @6 a", "test", "test2"); pack函數(shù)最常見的用途是創(chuàng)建可與C程序交互的數(shù)據(jù),例如C語言中字符串均以空字符(null)結(jié)尾,創(chuàng)建這樣的數(shù)據(jù)可以這樣做: $Cstring = pack ("ax", $mystring); 下表是一些格式字符與C中數(shù)據(jù)類型的等價關(guān)系:
|
格式字符 | 描述 |
a | 用空字符(null)補(bǔ)足的字符串 |
A | 用空格補(bǔ)足的字符串 |
b | 位串,低位在前 |
B | 位串,高位在前 |
c | 帶符號字符(通常-128~127) |
C | 無符號字符(通常8位) |
d | 雙精度浮點(diǎn)數(shù) |
f | 單精度浮點(diǎn)數(shù) |
h | 十六進(jìn)制數(shù)串,低位在前 |
H | 十六進(jìn)制數(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功能相反,將以機(jī)器格式存貯的值轉(zhuǎn)化成Perl中值的列表。其格式字符與pack基本相同(即上表),不同的有:A格式將機(jī)器格式字符串轉(zhuǎn)化為Perl字符串并去掉尾部所有空格或空字符;x為跳過一個字節(jié);@為跳過一些字節(jié)到指定的位置,如@4為跳過4個字節(jié)。下面看一個@和X合同的例子:
$longrightint = unpack ("@* X4 L", $packstring); 此語句將最后四個字節(jié)看作無符號長整數(shù)進(jìn)行轉(zhuǎn)化。下面看一個對uuencode文件解碼的例子: 1 : #!/usr/local/bin/perl當(dāng)將pack和unpack用于uuencode時,要記住,雖然它們與UNIX中的uuencode、uudecode工具算法相同,但并不提供首行和末行,如果想用uudecode對由pack的輸出創(chuàng)建的文件進(jìn)行解碼,必須也把首行和末行輸出(詳見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。 |
例子 |
1 : #!/usr/local/bin/perl 2 : 3 : $vector = pack ("B*", "11010011"); 4 : $val1 = vec ($vector, 0, 4); 5 : $val2 = vec ($vector, 1, 4); 6 : print ("high-to-low order values: $val1 and $val2\n"); 7 : $vector = pack ("b*", "11010011"); 8 : $val1 = vec ($vector, 0, 4); 9 : $val2 = vec ($vector, 1, 4); 10: 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ù)名 | grep |
調(diào)用語法 | @foundlist = grep (pattern, @searchlist); |
解說 | 與同名的UNIX查找工具類似,grep函數(shù)在列表中抽取與指定模式匹配的元素,參數(shù)pattern為欲查找的模式,返回值是匹配元素的列表。 |
例子 | @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ù)skipelements是拼接前跳過的元素數(shù)目,length是被替換的元素數(shù),newlist是將要拼接進(jìn)來的列表。當(dāng)newlist的長度大于length時,后面的元素自動后移,反之則向前縮進(jìn)。因此,當(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進(jìn)行操作。 |
函數(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,就開始一個新元素,但pattern本身不包含在元素中。maxlength是可選項(xiàng),當(dāng)指定它時,達(dá)到該長度就不再分割。 |
函數(shù)名 | sort |
調(diào)用語法 | @sorted = sort (@list); |
解說 | 按字母次序給列表排序。 |
函數(shù)名 | reverse |
調(diào)用語法 | @reversed = reverse (@list); |
解說 | 按字母反序給列表排序。 |
函數(shù)名 | map |
調(diào)用語法 | @resultlist = map (expr, @list); |
解說 | 此函數(shù)在Perl5中定義,可以把列表中的各個元素作為表達(dá)式expr的操作數(shù)進(jìn)行運(yùn)算,其本身不改變,結(jié)果作為返回值。在表達(dá)式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ù)返回值為非零值(真),否則為零值(假)。 |
例子 |
1 : #!/usr/local/bin/perl 2 : 3 : @array = &mysub(); 4 : $scalar = &mysub(); 5 : 6 : sub mysub { 7 : if (wantarray()) { 8 : print ("true\n"); 9 : } else { 10: print ("false\n"); 11: } 12: } |
結(jié)果 | $program true false $ |
函數(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}); |