深入解析Perl內(nèi)部函數(shù)的使用
本文和大家重點(diǎn)討論一下Perl內(nèi)部函數(shù),Perl中的函數(shù)主要分為兩類:數(shù)組運(yùn)算符和命名的一元運(yùn)算符。數(shù)組運(yùn)算符需要一個(gè)以上的參數(shù),而一元運(yùn)算符不能超過一個(gè)參數(shù),而一元運(yùn)算符一般只提供一個(gè)標(biāo)量作為參數(shù),而數(shù)組運(yùn)算符可能會(huì)提供標(biāo)量或者數(shù)組作為參數(shù)。
Perl內(nèi)部函數(shù)
Perl中的函數(shù)主要分為兩類:數(shù)組運(yùn)算符和命名的一元運(yùn)算符。不同之處在于他們的優(yōu)先級(jí)關(guān)系。(參閱優(yōu)先級(jí)表)數(shù)組運(yùn)算符需要一個(gè)以上的參數(shù),而一元運(yùn)算符不能超過一個(gè)參數(shù)。因此,一個(gè)逗號(hào)將結(jié)束一個(gè)一元運(yùn)算符,對(duì)于數(shù)組運(yùn)算符,只是起到分隔的作用。一元運(yùn)算符一般只提供一個(gè)標(biāo)量作為參數(shù),而數(shù)組運(yùn)算符可能會(huì)提供標(biāo)量或者數(shù)組作為參數(shù)。如果二者都有,標(biāo)量參數(shù)一般在前面,數(shù)組參數(shù)跟在后面。(注意,可以只有一個(gè)數(shù)組變量)比如,splice()有三個(gè)標(biāo)量變量,后面加上一個(gè)數(shù)組,相反gethostbyname()有四個(gè)標(biāo)量變量。
在語法描述中,數(shù)組運(yùn)算符需要一個(gè)用LIST標(biāo)識(shí)的數(shù)組作為參數(shù)。這些數(shù)組可能由標(biāo)量參數(shù)和數(shù)組值混合組成;
數(shù)組值將包含在數(shù)組中,每個(gè)元素被插入數(shù)組中,形成一個(gè)更長(zhǎng)一維的數(shù)組值。數(shù)組的元素應(yīng)該用逗號(hào)分開。
下面列出的Perl內(nèi)部函數(shù)有的在參數(shù)兩邊有括號(hào),有的沒有。(語法描述中省略括號(hào))
如果你使用括號(hào),一個(gè)簡(jiǎn)單的規(guī)則是(偶爾會(huì)令人吃驚):如果是函數(shù),沒有優(yōu)先級(jí)的問題;如果它是一個(gè)數(shù)組運(yùn)算符或者一元運(yùn)算符
那么就要考慮優(yōu)先級(jí)。并且,函數(shù)兩邊的空白和"("是不計(jì)算的--因此,有時(shí)候需要小心行事??纯聪旅娴膸讉€(gè)例子:
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時(shí)帶上-w開關(guān)你將得到一些警告信息,您可以根據(jù)這些信息再體會(huì)一下。例如,上面的例子會(huì)產(chǎn)生如下信息:
print(...)interpretedasfunctionat-line1.
Uselessuseofintegeradditioninvoidcontextat-line1.
有些Perl內(nèi)部函數(shù)根本不需要參數(shù),因此工作方式和一元運(yùn)算符和數(shù)組運(yùn)算符都不同,time和endpwent算是兩個(gè)典型吧.如,time+86_400實(shí)際上是time()+86_400.
對(duì)于可以用在標(biāo)量或者數(shù)組的上下文中的函數(shù),非失敗性的錯(cuò)誤在標(biāo)量環(huán)境下通常暗示返回了未定義的值或在數(shù)組環(huán)境下返回一個(gè)空的數(shù)組。
記住下面的重要原則:
沒有規(guī)則和數(shù)組環(huán)境下的表達(dá)式的行為和他的標(biāo)量環(huán)境的行為有關(guān)系,反之亦然。這可能產(chǎn)生兩種完全不同的情況。在標(biāo)量環(huán)境下,每個(gè)運(yùn)算符和函數(shù)決定怎樣以最恰當(dāng)?shù)拇涡蚍祷刂?。有些運(yùn)算符在數(shù)組環(huán)境下返回?cái)?shù)組的長(zhǎng)度.,有些運(yùn)算符返回的一個(gè)元素,有些返回?cái)?shù)組中的***一個(gè)元素,有些返回成功執(zhí)行的操作的語句數(shù)。通常,他們返回一些你需要的值,除非你需要連續(xù)性。
在標(biāo)量環(huán)境下的命名數(shù)組在***眼看上去時(shí)和在標(biāo)量環(huán)境下的列表有很大的不同。在標(biāo)量環(huán)境下,你不能得到一個(gè)像(1,2,3)的列表,因?yàn)樵诰幾g時(shí),編譯器是知道當(dāng)前環(huán)境的,它將在那里產(chǎn)生標(biāo)量的逗號(hào)運(yùn)算符,而不是用于分隔數(shù)組元素的逗號(hào).也就是說,它永遠(yuǎn)不會(huì)以一個(gè)數(shù)組開始。
一般說來,Perl內(nèi)部函數(shù)對(duì)應(yīng)相應(yīng)的系統(tǒng)調(diào)用(如chown(2),fork(2),closedir(2),等等.)成功調(diào)用后返回真值,否則返回undef,下面將會(huì)提到。這一點(diǎn)和C的接口不一樣,C中出錯(cuò)時(shí)將返回-1.但是也有幾個(gè)例外,他們是wait,waitpid,和syscall.系統(tǒng)調(diào)用出錯(cuò)時(shí)出錯(cuò)信息將通過特殊變量$!返回。其他的函數(shù)則不會(huì),除非發(fā)生意外。
【編輯推薦】
- 用Perl語言進(jìn)行Socket編程
- 淺談配置Eclipse支持Perl腳本開發(fā)
- 用Perl和Google Earth創(chuàng)建可用性地圖
- Perl語言中的“指針”
- 讓Perl成為你的嵌入式開發(fā)工具