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