解析Perl內(nèi)部函數(shù)用法
本文和大家重點(diǎn)討論一下Perl內(nèi)部函數(shù)的概念,Perl函數(shù)主要分為兩類:數(shù)組運(yùn)算符和命名的一元運(yùn)算符。數(shù)組運(yùn)算符需要一個以上的參數(shù),而一元運(yùn)算符不能超過一個參數(shù),一元運(yùn)算符一般只提供一個標(biāo)量作為參數(shù),而數(shù)組運(yùn)算符可能會提供標(biāo)量或者數(shù)組作為參數(shù)。
Perl內(nèi)部函數(shù)
Perl函數(shù)主要分為兩類:數(shù)組運(yùn)算符和命名的一元運(yùn)算符。不同之處在于他們的優(yōu)先級關(guān)系。(參閱優(yōu)先級表)數(shù)組運(yùn)算符需要一個以上的參數(shù),而一元運(yùn)算符不能超過一個參數(shù)。因此,一個逗號將結(jié)束一個一元運(yùn)算符,對于數(shù)組運(yùn)算符,只是起到分隔的作用。一元運(yùn)算符一般只提供一個標(biāo)量作為參數(shù),而數(shù)組運(yùn)算符可能會提供標(biāo)量或者數(shù)組作為參數(shù)。如果二者都有,標(biāo)量參數(shù)一般在前面,數(shù)組參數(shù)跟在后面。(注意,可以只有一個數(shù)組變量)比如,splice()有三個標(biāo)量變量,后面加上一個數(shù)組,相反gethostbyname()有四個標(biāo)量變量。
在語法描述中,數(shù)組運(yùn)算符需要一個用LIST標(biāo)識的數(shù)組作為參數(shù)。這些數(shù)組可能由標(biāo)量參數(shù)和數(shù)組值混合組成;
數(shù)組值將包含在數(shù)組中,每個元素被插入數(shù)組中,形成一個更長一維的數(shù)組值。數(shù)組的元素應(yīng)該用逗號分開。
下面列出的函數(shù)有的在參數(shù)兩邊有括號,有的沒有。(語法描述中省略括號)
如果你使用括號,一個簡單的規(guī)則是(偶爾會令人吃驚):如果是函數(shù),沒有優(yōu)先級的問題;如果它是一個數(shù)組運(yùn)算符或者一元運(yùn)算符
那么就要考慮優(yōu)先級。并且,函數(shù)兩邊的空白和"("是不計算的--因此,有時候需要小心行事??纯聪旅娴膸讉€例子:
print1+2+4; #Prints7.
print(1+2)+4; #Prints3.
print(1+2)+4; #Alsoprints3!
print+(1+2)+4; #Prints7.
print((1+2)+4); #Prints7.
前面說得似乎有點(diǎn)抽象,那么你在運(yùn)行Perl時帶上-w開關(guān)你將得到一些警告信息,您可以根據(jù)這些信息再體會一下。例如,上面的例子會產(chǎn)生如下信息:
print(...)interpretedasfunctionat-line1.
Uselessuseofintegeradditioninvoidcontextat-line1.
有些Perl函數(shù)根本不需要參數(shù),因此工作方式和一元運(yùn)算符和數(shù)組運(yùn)算符都不同,time和endpwent算是兩個典型吧.如,time+86_400實際上是time()+86_400.
對于可以用在標(biāo)量或者數(shù)組的上下文中的函數(shù),非失敗性的錯誤在標(biāo)量環(huán)境下通常暗示返回了未定義的值或在數(shù)組環(huán)境下返回一個空的數(shù)組。
◆記住下面的重要原則:
沒有規(guī)則和數(shù)組環(huán)境下的表達(dá)式的行為和他的標(biāo)量環(huán)境的行為有關(guān)系,反之亦然。這可能產(chǎn)生兩種完全不同的情況。在標(biāo)量環(huán)境下,每個運(yùn)算符和函數(shù)決定怎樣以最恰當(dāng)?shù)拇涡蚍祷刂?。有些運(yùn)算符在數(shù)組環(huán)境下返回數(shù)組的長度.,有些運(yùn)算符返回的一個元素,有些返回數(shù)組中的***一個元素,有些返回成功執(zhí)行的操作的語句數(shù)。通常,他們返回一些你需要的值,除非你需要連續(xù)性。
在標(biāo)量環(huán)境下的命名數(shù)組在***眼看上去時和在標(biāo)量環(huán)境下的列表有很大的不同。在標(biāo)量環(huán)境下,你不能得到一個像(1,2,3)的列表,因為在編譯時,編譯器是知道當(dāng)前環(huán)境的,它將在那里產(chǎn)生標(biāo)量的逗號運(yùn)算符,而不是用于分隔數(shù)組元素的逗號.也就是說,它永遠(yuǎn)不會以一個數(shù)組開始。
一般說來,Perl中的函數(shù)對應(yīng)相應(yīng)的系統(tǒng)調(diào)用(如chown(2),fork(2),closedir(2),等等.)成功調(diào)用后返回真值,否則返回undef,下面將會提到。這一點(diǎn)和C的接口不一樣,C中出錯時將返回-1.但是也有幾個例外,他們是wait,waitpid,和syscall.系統(tǒng)調(diào)用出錯時出錯信息將通過特殊變量$!返回。其他的函數(shù)則不會,除非發(fā)生意外。
◆Perl函數(shù)分類
下面是Perl函數(shù)(包括看起來像函數(shù)的,如某些關(guān)鍵詞,命名運(yùn)算符)的分類.
標(biāo)量和字符串函數(shù)
chomp,chop,chr,crypt,hex,index,lc,lcfirst,length,oct,ord,pack,q/STRING/,qq/STRING/,reverse,rindex,sprintf,substr,tr///,uc,ucfirst,y///
正則表達(dá)式和模式匹配
m//,pos,quotemeta,s///,split,study,qr//
Perl函數(shù)之?dāng)?shù)字運(yùn)算函數(shù)
abs,atan2,cos,exp,hex,int,log,oct,rand,sin,sqrt,srand
真實數(shù)組函數(shù)
pop,push,shift,splice,unshift
列表數(shù)據(jù)函數(shù)
grep,join,map,qw/STRING/,reverse,sort,unpack
Perl函數(shù)之真實哈希函數(shù)
delete,each,exists,keys,values
輸入輸出函數(shù)
binmode,close,closedir,dbmclose,dbmopen,die,eof,fileno,flock,format,getc,print,printf,read,readdir,
rewinddir,seek,seekdir,select,syscall,sysread,sysseek,syswrite,tell,telldir,truncate,warn,write
固定長度的數(shù)據(jù)或記錄函數(shù)
pack,read,syscall,sysread,syswrite,unpack,vec
Perl函數(shù)之文件,目錄函數(shù)
-X,chdir,chmod,chown,chroot,fcntl,glob,ioctl,link,lstat,mkdir,open,opendir,readlink,rename,rmdir,stat,symlink,umask,unlink,utime
流控制關(guān)鍵詞
caller,continue,die,do,dump,eval,exit,goto,last,next,redo,return,sub,wantarray
作用域關(guān)鍵詞
caller,import,local,my,package,use
Miscellaneousfunctions
defined,dump,eval,formline,local,my,reset,scalar,undef,wantarray
Perl函數(shù)之進(jìn)程和進(jìn)程組函數(shù)
alarm,exec,fork,getpgrp,getppid,getpriority,kill,pipe,qx/STRING/,setpgrp,setpriority,sleep,system,times,wait,waitpid
Perl模塊關(guān)鍵詞
do,import,no,package,require,use
類和面向?qū)ο箨P(guān)鍵詞
bless
【編輯推薦】
- Perl函數(shù)集-數(shù)組和Perl列表函數(shù)解析
- Perl語言中Perl函數(shù)用法
- 解析兩大Perl標(biāo)量的操作符
- Perl函數(shù)手冊專家指導(dǎo)
- 技術(shù)分享 詳解Perl函數(shù)的參數(shù)接收方法