日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

perl学习之:函数总结

發布時間:2023/12/13 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 perl学习之:函数总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、進程處理函數

1、進程啟動函數

函數名 eval

調用語法 eval(string)
解說
將string看作Perl語句執行。
正確執行后,系統變量$@為空串,如果有錯誤,$@中為錯誤信息。
例子 $print = "print
("hello,world\n");";
eval ($print);
結果輸出 hello, world

函數名 system

調用語法 system(list)
解說
list中第一個元素為程序名,其余為參數。
system啟動一個進程運行程序并等待其結束,程序結束后錯誤代碼左移八位成為返回值。

例子 @proglist = ("echo", "hello,world!");
system(@proglist);
結果輸出
hello, world!

函數名 fork

調用語法 procid = fork();

解說 創建程序的兩個拷貝--父進程和子進程--同時運行。子進程返回零,父進程返回非零
值,此值為子程序的進程ID號。
例子 $retval
= fork();
if ($retval == 0) {
# this is the child process
exit; #
this terminates the child process
} else {
# this is the parent
process
}
結果輸出 無

函數名 pipe

調用語法 pipe
(infile, outfile);
解說
與fork合用,給父進程和子進程提供通信的方式。送到outfile文件變量的信息可以
通過infile文件變量讀取。步驟:
1、調用pipe
2、用fork將程序分成父進程和子進程
3、一個進程關掉infile,另一個關掉outfile

例子 pipe (INPUT, OUTPUT);
$retval = fork();
if ($retval != 0) {
#
this is the parent process
close (INPUT);
print ("Enter a line of
input:
");
$line = <STDIN>;
print OUTPUT ($line);
} else
{
# this is the child process
close (OUTPUT);
$line =
<INPUT>;
print ($line);
exit (0);
}

結果輸出 $
program
Enter a line of input:
Here is a test line
Here is
a test line
$

函數名 exec

調用語法 exec (list);

解說 與system類似,區別是啟動新進程前結束當前程序。常與fork合用,當fork分成兩個
進程后,子進程用exec啟動另一個程序。

例子
結果輸出

函數名 syscall

調用語法 syscall
(list);
解說 調用系統函數,list第一個元素是系統調用名,其余為參數。
如果參數是數字,就轉化成C的整型數(type
int)。否則傳遞字符串的指針。詳見UNIX的幫助Perl文檔。
使用syscall必須包含文件syscall.pl,即:
require
("syscall.ph");
例子
結果輸出
2、進程終止函數

函數名
die

調用語法 die (message);
解說
終止程序并向STDERR輸出錯誤信息。message可以為字符串或列表。如果最后一個參
數不包含換行符,則程序文件名和行號也被輸出。
例子 die
("Cannot open input file");
結果輸出 Cannot open input file at myprog line 6.

函數名 warn

調用語法 warn (message);
解說
與die類似,區別是不終止程序。
例子 warn("Danger! Danger!
");
結果輸出 Danger! Danger!

函數名 exit

調用語法 exit (retcode);
解說 終止程序并指定返回值。

例子 exit(2);
結果輸出 無

函數名 kill

調用語法 kill
(signal, proclist);
解說
給一組進程發送信號。
signal是發送的數字信號,9為殺掉進程。
proclist是進程ID列表。詳見kill的UNIX幫助。
例子

結果輸出

3、進程控制函數

函數名 sleep

調用語法 sleep (time);
解說
將程序暫停一段時間。time是停止的秒數。返回值為實際停止的秒數。
例子 sleep (5);
結果輸出 無

函數名 wait

調用語法 procid = wait();
解說
暫停程序執行,等待子進程終止。
不需要參數,返回值為子進程ID,如果沒有子進程,返回-1。
例子
結果輸出

函數名 waitpid

調用語法 waitpid (procid, waitflag);
解說
暫停程序執行,等待特定的子進程終止。procid為等待的進程ID
例子 $procid = fork();
if ($procid == 0)
{
# this is the child process
print ("this line is printed
first
");
exit(0);
} else {
# this is the parent process

waitpid ($procid, 0);
print ("this line is printed last
");
}
結果輸出
$ program
this line is printed first
this line is printed last
$

4、其它控制函數

函數名 caller

調用語法 subinfo = caller();

解說 返回調用者的程序名和行號,用于Perl
Debugger。
返回值為三元素的列表:
1、調用處的包名
2、調用者文件名
3、調用處的行號
例子

結果輸出

函數名 chroot

調用語法 chroot (dir);
解說
改變程序的根目錄,詳見chroot幫助。
例子
結果輸出

函數名 local

調用語法 local($variable);
解說
在語句塊(由大括號包圍的語句集合)中定義局域變量,僅在此語句塊中起作用,對其
的改變不對塊外同名變量造成影響。
千萬不要在循環中使用,否則每次循環都定義一個新的局域變量!

例子
結果輸出

函數名 times

調用語法 timelist =
times
解說
返回該程序及所有子進程消耗的工作時間。
返回值為四個浮點數的列表:
1、程序耗用的用戶時間
2、程序耗用的系統時間
3、子進程耗用的用戶時間
4、子進程耗用的系統時間

例子
結果輸出

二、數學函數

函數名 sin

調用語法 retval = sin (value);

解說 參數為弧度值。

函數名 cos

調用語法 retval = cos (value);
解說 參數為弧度值。

函數名 atan2

調用語法 retval = atan2 (value1, value2);

解說 運算并返回value1除以value2結果的arctan值,單位為弧度,范圍在-PI~PI。
應用例:
角度轉化成弧度子程序。
sub degrees_to_radians {
local ($degrees) = @_;
local ($radians);11:

$radians = atan2(1,1) * $degrees / 45;
}

函數名 sqrt

調用語法 retval = sqrt (value);
解說
平方根函數。value為非負數。

函數名 exp

調用語法 retval = exp (value);
解說
返回e的value次方。

函數名 log
調用語法 retval = log (value);
解說 以e為底的自然對數。

函數名 abs
調用語法 retval = abs (value);
解說
絕對值函數。(Perl 4中沒有)

函數名 rand
調用語法 retval = rand (num);
解說
隨機數函數,返回0和整數num之間的一個浮點數。

函數名 srand
調用語法 srand (value);
解說
初始化隨機數生成器。保證每次調用rand真正隨機。

三、字符串處理函數

函數名 index
調用語法 position = index (string, substring,
position);
解說
返回子串substring在字符串string中的位置,如果不存在則返回-1。參數position
是可選項,表示匹配之前跳過的字符數,或者說從該位置開始匹配。

函數名 rindex
調用語法 position = rindex (string,
substring, position);
解說 與index類似,區別是從右端匹配。

函數名 length
調用語法 num = length (string);
解說
返回字符串長度,或者說含有字符的數目。

函數名 pos
調用語法 offset =
pos(string);
解說 返回最后一次模式匹配的位置。

函數名 substr
調用語法
substr (expr, skipchars, length)
解說
抽取字符串(或表達式生成的字符串)expr中的子串,跳過skipchars個字符,或者
說從位置skipchars開始抽取子串(第一個字符位置為0),子串長度為length,此參數可
忽略,意味著取剩下的全部字符。
當此函數出現在等式左邊時,expr必須為變量或數組元素,此時其中部分子串被等式右邊
的值替換。

函數名 study
調用語法 study (scalar);
解說
用一種內部格式提高變量的訪問速度,同一時刻只對一個變量起作用。

函數名 lc
uc
調用語法
retval = lc(string);
retval = uc(string);
解說 將字符串全部轉換成小/大寫字母。

函數名 lcfirst
ucfirst
調用語法 retval =
lcfirst(string);
retval = ucfirst(string);
解說 將第一個字母轉換成小/大寫。

函數名 quotameta

調用語法 newstring =
quotemeta(oldstring);
解說 將非單詞的字母前面加上反斜線()。
語句 : $string =
quotemeta($string);
等效于:$string =~
s/(W)/\$1/g;
常用于模式匹配操作中,確保字符串中沒有字符被看作匹配操作符。

函數名 join

調用語法 join (joinstr, list);
解說
把字符串列表(數組)組合成一個長的字符串,在每兩個列表元素間插入串joinstr。

函數名 sprintf

調用語法 sprintf (string, fields);
解說
與printf類似,區別是結果不輸出到文件,而作為返回值賦給變量。
例子 $num = 26;
$outstr = sprintf("%d =
%x hexadecimal or %o octal
",$num, $num, $num);
print ($outstr);
結果輸出 26
= 1a hexadecimal or 32 octal

四、標量轉換函數

函數名 chop

調用語法 $lastchar = chop (var);
解說
var可為變量或數組,當var為變量時,最后一個字符被刪除并賦給$lastchar,當va
r為數組/列表時,所有元素的最后一個字符被刪除,最后一個元素的最后一個字母賦給$l
astchar。

函數名 chomp

調用語法 result = chomp(var);
解說
檢查字符串或字符串列表中元素的最后一個字符是否為由系統變量$/定義的行分隔符
,如果是就刪除。返回值為實際刪除的字符個數。

函數名 crypt

調用語法 result = crypt (original, salt);

解說
用DES算法加密字符串,original是將要加密的字符串,salt是兩個字符的字符串,
定義如何改變DES算法,以使更難解碼。返回值為加密后的串。

函數名 hex

調用語法 decnum = hex (hexnum);
解說
將十六進制數(字符串形式)轉化為十進制數。

函數名 int

調用語法 intnum = int (floatnum);
解說
將浮點數舍去小數部分轉化為整型數。

函數名 oct

調用語法 decnum = oct (octnum);
解說
將八進制數(字符串形式)或十六進制數("0x.."形式)轉化為十進制數。

函數名 ord

調用語法 asciival = ord (char);
解說
返回單個字符的ASCII值,與PASCAL中同名函數類似。

函數名 chr

調用語法 $char = chr (asciival);
解說
返回ASCII值的相應字符,與PASCAL中同名函數類似。

函數名 pack

調用語法 formatstr = pack(packformat, list);

解說
把一個列表或數組以在實際機器存貯格式或C等編程語言使用的格式轉化(包裝)到
一個簡單變量中。參數packformat包含一個或多個格式字符,列表中每個元素對應一個,
各格式字符間可用空格或tab隔開,因為pack忽略空格。

除了格式a、A和@外,重復使用一種格式多次可在其后加個整數,如:
$twoints = pack ("i2", 103, 241);

把同一格式應用于所有的元素則加個*號,如:
$manyints = pack ("i*", 14, 26, 11, 83);

對于a和A而言,其后的整數表示要創建的字符串長度,重復方法如下:
$strings = pack ("a6" x 2, "test1",
"test2");

格式@的情況比較特殊,其后必須加個整數,該數表示字符串必須的長度,如果長度不夠
,則用空字符(null)補足,如:
$output =
pack ("a @6 a", "test", "test2");

pack函數最常見的用途是創建可與C程序交互的數據,例如C語言中字符串均以空字符(n
ull)結尾,創建這樣的數據可以這樣做:

$Cstring = pack ("ax", $mystring);
下表是一些格式字符與C中數據類型的等價關系:

字符 等價C數據類型
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
雙精度浮點數
f 單精度浮點數
h 十六進制數串,低位在前
H 十六進制數串,高位在前
i 帶符號整數
I 無符號整數

l 帶符號長整數
L 無符號長整數
n 網絡序短整數
N 網絡序長整數
p 字符串指針
s 帶符號短整數

S 無符號短整數
u 轉化成uuencode格式
v VAX序短整數
V VAX序長整數
x 一個空字節
X
回退一個字節
@ 以空字節(null)填充

函數名 unpack

調用語法 @list
= unpack (packformat, formatstr);
解說
unpack與pack功能相反,將以機器格式存貯的值轉化成Perl中值的列表。其格式字符
與pack基本相同(即上表),不同的有:A格式將機器格式字符串轉化為Perl字符串并去掉
尾部所有空格或空字符;x為跳過一個字節;@為跳過一些字節到指定的位置,如@4為跳過
4個字節。下面看一個@和X合同的例子:
$longrightint = unpack ("@* X4 L", $pac
kstring);

此語句將最后四個字節看作無符號長整數進行轉化。下面看一個對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);


當將pack和unpack用于uuencode時,要記住,雖然它們與UNIX中的uuencode、uudecode
工具算法相同,但并不提供首行和末行,如果想用uudecode對由pack的輸出創建的文件進
行解碼,必須也把首行和末行輸出(詳見UNIX中uuencode幫助)。

函數名 vec

調用語法 retval = vec (vector, index, bits);

解說
顧名思義,vec即矢量(vector)函數,它把簡單變量vector的值看作多塊(維)數據,
每塊含一定數目的位,合起來即一個矢量數據。每次的調用訪問其中一塊數據,可以讀取
,也可以寫入。參數index就象數組下標一樣,提出訪問哪一塊,0為第一塊,依次類推,
要注意的是訪問次序是從右到左的,即第一塊在最右邊。參數bits指定每塊中的位數,可
以為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
");
$vector = pack ("b*", "11010011");
$val1 = vec ($vector, 0,
4);
$val2 = vec ($vector, 1, 4);
print ("low-to-high order values: $val1
and $val2
");

結果 high-to-low order values: 3 and 13
low-to-high
order values: 11 and 12

函數名 defined

調用語法 retval
= defined (expr);
解說
判斷一個變量、數組或數組的一個元素是否已經被賦值。expr為變量名、數組名或一
個數組元素。
如果已定義,返回真,否則返回假。

函數名 undef

調用語法 retval = undef (expr);
解說
取消變量、數組或數組元素甚至子程序的定義,回收其空間。返回值始終為未定義值
,此值與空串等效。

五、數組和列表函數

函數名 grep
調用語法 @foundlist = grep (pattern, @searchlist);

解說 與同名的UNIX查找工具類似,grep函數在列表中抽取與指定模式匹配的元素,參數p
attern為欲查找的模式,返回值是匹配元素的列表。

例子 @list = ("This", "is", "a", "test");
@foundlist = grep(/^[tT]/,
@list);
結果 @foundlist = ("This", "test");

函數名 splice

調用語法 @retval = splice (@array, slipelements, length, @newlist);

解說
拼接函數可以向列表(數組)中間插入元素、刪除子列表或替換子列表。參數ski
pelements是拼接前跳過的元素數目,length是被替換的元素數,newlist是將要拼接進來
的列表。當newlist的長度大于length時,后面的元素自動后移,反之則向前縮進。因此,
當length=0時,就相當于向列表中插入元素,而形如語句

splice (@array, -1, 0,
"Hello");
則向數組末尾添加元素。而當newlist為空時就相當于刪除子列表,這時,如果length為空
,就從第skipelements個元素后全部刪除,而刪除最后一個元素則為:splice
(@array,
-1);這種情況下,返回值為被刪去的元素列表。

函數名 shift
調用語法
element = shift (@arrayvar);
解說
刪去數組第一個元素,剩下元素前移,返回被刪去的元素。不加參數時,缺省地對@
ARGV進行操作。

函數名 unshift

調用語法 count = unshift (@arrayver, elements);
解說
作用與shift相反,在數組arrayvar開頭增加一個或多個元素,返回值為結果(列表)
的長度。等價于splice (@array, 0, 0,
elements);

函數名 push

調用語法 push (@arrayvar,
elements);
解說 在數組末尾增加一個或多個元素。等價于slice (@array, @array, 0, elements);

函數名 pop

調用語法 element = pop (@arrayvar);
解說
與push作用相反,刪去列表最后一個元素,并將其作為返回值,當列表已空,則返回
“未定義值”(即空串)。

函數名 split

調用語法 @list = split (pattern, string,
maxlength);
解說
將字符串分割成一組元素的列表。每匹配一次pattern,就開始一個新元素,但patt
ern本身不包含在元素中。maxlength是可選項,當指定它時,達到該長度就不再分割。

函數名
sort

調用語法 @sorted = sort (@list);
解說 按字母次序給列表排序。

函數名 reverse

調用語法 @reversed = reverse (@list);

解說 按字母反序給列表排序。

函數名 map

調用語法 @resultlist =
map (expr, @list);
解說
此函數在Perl5中定義,可以把列表中的各個元素作為表達式expr的操作數進行運算
,其本身不改變,結果作為返回值。在表達式expr中,系統變量$_代表各個元素。

例子 1、@list = (100, 200, 300);
@results = map ($_+1,
@list);
2、@results = map (&mysub($_), @list);
結果 1、(101, 201,
301)
2、無

函數名 wantarray

調用語法 result =
wantarray();
解說
Perl中,一些內置函數的行為根據其處理簡單變量還是數組有所不同,如chop。自定
義的子程序也可以定義這樣兩種行為。當子程序被期望返回列表時,此函數返回值為非零
值(真),否則為零值(假)。

例子

復制代碼
代碼如下:

#!/usr/local/bin/perl

@array =
&mysub();
$scalar = &mysub();

sub mysub {
if
(wantarray()) {
print ("true
");
} else {
print
("false
");
}
}


結果 $program
true
false
$

六、關聯數組函數

函數名 keys

調用語法 @list = keys (%assoc_array);
解說
返回關聯數組無序的下標列表。

函數名 values

調用語法 @list = values (%assoc_array);

解說 返回關聯數組無序的值列表。

函數名 each

調用語法 @pair = each (%assoc_array);
解說
返回兩個元素的列表--鍵值對(即下標和相應的值),同樣無序。當關聯數組已空,
則返回空列表。

函數名
delete

調用語法 element = delete (assoc_array_item);
解說
刪除關聯數組中的元素,并將其值作為返回值。
例子 %array = ("foo", 26, "bar", 17");
$retval =
delete ($array{"foo"});
結果 $retval = 26;

函數名 exists

調用語法 result = exists (element);
解說
在Perl5中定義,判斷關聯數組中是否存在某元素,若存在,返回非零值(真),否則
返回零值(假)。
例子 $result = exists
($myarray{$mykey});

總結

以上是生活随笔為你收集整理的perl学习之:函数总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。