Perl函數集

來源:互聯網
上載者:User

一、進程處理函數

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:\n");

  $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!\n");

結果輸出 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\n");

  exit(0);

} else {

  # this is the parent process

  waitpid ($procid, 0);

  print ("this line is printed last\n");

}

結果輸出 $ 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\n",$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 字元(null)補足,如:

   $output = pack ("a @6 a", "test", "test2");

  pack函數最常見的用途是建立可與C程式互動的資料,例如C語言中字串均以Null 字元(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 字元(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字串並去掉
尾部所有空格或Null 字元;x為跳過一個位元組;@為跳過一些位元組到指定的位置,如@4為跳過
4個位元組。下面看一個@和X合約的例子:    $longrightint = unpack ("@* X4 L", $pac
kstring);

  此語句將最後四個位元組看作無符號長整數進行轉化。下面看一個對uuencode檔案解碼的
例子:

1 : #!/usr/local/bin/perl

2 :

3 : open (CODEDFILE, "/u/janedoe/codefile") ||

4 : die ("Can't open input file");

5 : open (OUTFILE, ">outfile") ||

6 : die ("Can't open output file");

7 : while ($line = <CODEDFILE>) {

8 : $decoded = unpack("u", $line);

9 : print OUTFILE ($decoded);

10: }

11: close (OUTFILE);

12: 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。

例子 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"); 

結果 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。自定
義的子程式也可以定義這樣兩種行為。當子程式被期望返回列表時,此函數傳回值為非零
值(真),否則為零值(假)。

例子 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: } 

結果 $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});

 

轉載:http://www.cnblogs.com/xinghua/archive/2007/02/06/642313.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.