溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用Perl的Perl面向?qū)ο缶幊?/h1>
發(fā)布時(shí)間:2021-12-06 10:57:00 來(lái)源:億速云 閱讀:118 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹如何使用Perl的Perl面向?qū)ο缶幊蹋闹薪榻B的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

一、模塊簡(jiǎn)介

模塊(module)就是Perl包(pachage)。Perl中的對(duì)象基于對(duì)包中數(shù)據(jù)項(xiàng)的引用。(引用見第x章引用)。
詳見http://www.nease.net/tppmsgs/msgs0.htm#28的perlmod和perlobj。
在用其他語(yǔ)言進(jìn)行Perl面向?qū)ο缶幊虝r(shí),先聲明一個(gè)類然后創(chuàng)建該類的對(duì)象(實(shí)例),特定類任何對(duì)象的行為方式是相同的,由類方法確定,能夠通過(guò)定義新類或從現(xiàn)存類繼承來(lái)創(chuàng)建類。已熟悉Perl面向?qū)ο缶幊痰娜四軌蛟诖伺龅皆S多熟悉的術(shù)語(yǔ)。Perl一直是個(gè)Perl面向?qū)ο蟮恼Z(yǔ)言,在Perl5中,語(yǔ)法略有變動(dòng),更規(guī)范化了對(duì)象的使用。

下面三個(gè)定義對(duì)理解對(duì)象、類和方法在Perl中如何工作至關(guān)重要。
◆類是個(gè)Perl包,其中含提供對(duì)象方法的類。
◆方法是個(gè)Perl子程式,類名是其***個(gè)參數(shù)。
◆對(duì)象是對(duì)類中數(shù)據(jù)項(xiàng)的引用。.

二、Perl中的類

再?gòu)?qiáng)調(diào)一下,一個(gè)Perl類是僅是個(gè)包而已。當(dāng)您看到Perl文檔中提到“類”時(shí),把他看作“包”就行了。Perl5的語(yǔ)法能夠創(chuàng)建類,假如您已熟悉C,那么大部分語(yǔ)法您已掌控了。和Perl4不同的概念是用雙冒號(hào)(::)來(lái)標(biāo)識(shí)基本類和繼承類(子類)。
Perl面向?qū)ο蟮囊粋€(gè)重要特性是繼承。Perl中的繼承特性和其他Perl面向?qū)ο笳Z(yǔ)言不完全相同,他只繼承方法,您必須用自己的機(jī)制來(lái)實(shí)現(xiàn)數(shù)據(jù)的繼承。
因?yàn)槊總€(gè)類是個(gè)包,所以他有自己的名字空間及自己的符號(hào)名關(guān)聯(lián)數(shù)組(詳見第x章關(guān)聯(lián)數(shù)組),每個(gè)類因而能夠使用自己的單獨(dú)符號(hào)名集。和包的引用結(jié)合,能夠用單引號(hào)(\\')操作符來(lái)定位類中的變量,類中成員的定位形式如:$class\\'$member。在Perl5中,可用雙冒號(hào)替代單引號(hào)來(lái)獲得引用,如:$class\\'$member和$class::$member相同。.

三、創(chuàng)建類

本節(jié)介紹創(chuàng)建一個(gè)新類的必要步驟。下面使用的例子是創(chuàng)建一個(gè)稱為Cocoa的簡(jiǎn)單的類,其功能是輸出一個(gè)簡(jiǎn)單的Java應(yīng)用的源碼的必要部分。放心,這個(gè)例子無(wú)需您有Java的知識(shí),但也不會(huì)使您成為Java專家,其目的是講述創(chuàng)建類的概念。
首先,創(chuàng)建一個(gè)名為Cocoa.pm的包文檔(擴(kuò)展名pm是包的缺省擴(kuò)展名,意為PerlModule)。一個(gè)模塊就是個(gè)包,一個(gè)包就是個(gè)類。在做其他事之前,先加入“1;”這樣一行,當(dāng)您增加其他行時(shí),記住保留“1;”為***一行。這是Perl包的必需條件,否則該包就不會(huì)被Perl處理。.

四、構(gòu)造函數(shù)

Perl面向?qū)ο笾袠?gòu)造函數(shù)是類的子程式,他返回和類名相關(guān)的一個(gè)引用。將類名和引用相結(jié)合稱為“祝?!币粋€(gè)對(duì)象,因?yàn)榻⒃摻Y(jié)合的函數(shù)名為bless(),其語(yǔ)法為:
blessYeReference[,classname]
YeReference是對(duì)被“祝福”的對(duì)象的引用,classname是可選項(xiàng),指定對(duì)象獲取方法的包名,其缺省值為當(dāng)前包名。
創(chuàng)建一個(gè)構(gòu)建函數(shù)的方法為返回已和該類結(jié)合的內(nèi)部結(jié)構(gòu)的引用。如..

subnew{  my$this={};#Createananonymoushash,and#selfpointstoit.  bless$this;#ConnectthehashtothepackageCocoa.  return$this;#Returnthereferencetothehash.  }

五、方法

Perl類的方法只但是是個(gè)Perl子程式而已,也即通常所說(shuō)的成員函數(shù)。Perl面向?qū)ο笾蠵erl的方法定義不提供任何特別語(yǔ)法,但規(guī)定方法的***個(gè)參數(shù)為對(duì)象或其被引用的包。Perl有兩種方法:靜態(tài)方法和虛方法。
靜態(tài)方法***個(gè)參數(shù)為類名,虛方法***個(gè)參數(shù)為對(duì)象的引用。方法處理***個(gè)參數(shù)的方式?jīng)Q定了他是靜態(tài)的還是虛的。靜態(tài)方法一般忽略掉***個(gè)參數(shù),因?yàn)樗麄円阎雷约涸谀膫€(gè)類了,構(gòu)造函數(shù)即靜態(tài)方法。虛方法通常首先把***個(gè)參數(shù)shift到變量self或this中,然后將該值作普通的引用使用。.

六、方法的輸出

假如您現(xiàn)在想引用Cocoa.pm包,將會(huì)得到編譯錯(cuò)誤說(shuō)未找到方法,這是因?yàn)镃ocoa.pm的方法還沒(méi)有輸出。輸出方法需要Exporter模塊,在包的開始部分加上下列兩行:
requireExporter;
@ISA=qw(Exporter);
Perl面向?qū)ο笾蠵erl類的繼承是通過(guò)@ISA數(shù)組實(shí)現(xiàn)的。@ISA數(shù)組無(wú)需在任何包中定義,然而,一旦他被定義,Perl就把他看作目錄名的特別數(shù)組。他和@INC數(shù)組類似,@INC是包含文檔的尋找路徑。@ISA數(shù)組含有類(包)名,當(dāng)一個(gè)方法在當(dāng)前包中未找到時(shí)就到@ISA中的包去尋找。@ISA中還含有當(dāng)前類繼承的基類名。

類中調(diào)用的任何方法必須屬于同一個(gè)類或@ISA數(shù)組定義的基類。假如一個(gè)方法在@ISA數(shù)組中未找到,Perl就到AUTOLOAD()子程式中尋找,這個(gè)可選的子程式在當(dāng)前包中用sub定義。若使用AUTOLOAD子程式,必須用useAutoload;語(yǔ)句調(diào)用autoload.pm包。AUTOLOAD子程式嘗試從已安裝的Perl庫(kù)中裝載調(diào)用的方法。假如AUTOLOAD也失敗了,Perl再到UNIVERSAL類做***一次嘗試,假如仍失敗,Perl就生成關(guān)于該無(wú)法解析函數(shù)的錯(cuò)誤。..

七、方法的調(diào)用

調(diào)用一個(gè)對(duì)象的方法有兩種方法,一是通過(guò)該象的引用(虛方法),一是直接使用類名(靜態(tài)方法)。。

以上是“如何使用Perl的Perl面向?qū)ο缶幊獭边@篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI