閱讀407 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Perl語言麵向對象入門

因為項目原因,接觸了一門新的語言----Perl。初識之時,覺得它既像bash shell,又像C語言。因為有C/C++/Java以及shell基礎,所以這門語言上水並沒有很困難,但是它的麵向對象還是給了我極其深刻的印象,因為它太“奇怪”了。即便是現在,我也不敢說理解了perl的麵向對象編程,也僅僅是掌握了其基本的語法。本著學習分享的目的,今天,就通過一些簡單代碼來展示一下Perl的麵向對象編程。

在Java或者C++中,我們會經常使用一個對象Property來讀取配置文件,而Property就被定義成一個類。現在,我們就通過perl語言來實現這樣一個類。包含三個文件:perl主程序文件test_perl_oop.pl(扮演的角色像是main方法)、包文件Property.pm(類似Java中類源文件)以及配置文件test.conf。

前提:#!/bin/perl表示使用perl來執行當前源程序。和眾多腳本語言一樣,Perl語言使用#作為單行注釋符。

首先,定以“類文件”Property.pm。

#!/bin/perl

package Property;#定義包名,同時也定義了類Property。

# new方法同Java中的構造方法,my $class = shift以及bless $class似乎是定義一個類的格式,
# 而$file是該類的一個屬性(perl使用$來定義變量),我用來存儲配置文的文件名,這個值需要通過new方法傳遞進來。
# 如果該類有多個屬性時,可使用hash變量(符號%)來表示
# perl語言中,my表示局部變量,our表示全局變量,sub表示子方法
# bless $file,$class是格式,大致是將$file封裝成對象,而加“\”,bless \$file表示封裝成對象並返回,
# 如果沒有加“\”,在bless語句之後使用return $file也是可以的。
sub new{
  my $class = shift;
  my $file = shift;

  bless \$file, $class;
}

# 定義類的方法, my $self = shift也是一個格式,$self類似java中的this,表示當前對象
# $$self,$self表示當前對象,$$self(兩個$)獲取的就是我在new中定義的$file,即文件名
# test.conf配置文件中,每一行使用了key=value這樣的格式
# my $key=shift,表示getProperty方法需要傳遞一個參數進來
sub getProperty{
  my $self = shift;
  my $file_name = $$self;
  my $key = shift;

  # 接下來就是一個常規的讀文件過程,一行一行讀,並將每一行以“=”為分割符,分割成數組
  # key=value, 則數組第一個值為key,第二個值為value
  # 將key與傳遞進來的$key進行比較,匹配上則返回對應的value,並關閉文件
  if(open(cache,"<$file_name")){
    while($line = <cache>){
      chomp($line);
      my @temp = split(/=/,$line);
      if(@temp[0] eq $key){
        close(cache);
        return @temp[1];
      }
    }
    close(cache);
  }
  # 沒用找到對應的值時,返回一個undef,類似java中的null
  undef;
}
# 類的格式,必須寫一個1在這裏
1;

至此,一個簡單的perl類就定義好了。對不熟悉perl語言的朋友來說,這個類理解起來肯定有點費勁,別管那麼多了,趁熱打鐵,再來個測試方法,把程序跑起來再說。

#!/bin/perl

# 引用Property類,use等同java中的import或者C/C++中的include
use Property;

# new一個Property對象
my $property = Property->new("test.conf");

# 調用類中方法
my $name = $property->getProperty("name");
my $age = $property->getProperty("age");
my $gender = $property->getProperty("gender");
my $adderss = $property->getProperty("address");

print "name: $name, age: $age, gender: $gerder, address: $adderss\n";

還差一個配置文件test.conf

name=Francis Yang
age=**
gender=male
address=Beijing,PRC.

將這三個文件放置於同一目錄下,然後使用perl test_perl_oop.pl命令運行程序,結果如下:

name: Francis Yang, age: **, gender: , address: Beijing,PRC.
``
OK,就是這樣,一個簡單的麵向對象的perl程序就寫完了。相比Java和C++語言,Perl語言在麵向對象的語法上更難理解,但是樓主的態度是,管你的,“沒事走兩步看看”,先來個小樣例程序跑一跑,跑一跑再來理解。

學習perl才剛剛開始。It is a long way to go。說到Perl,就不得不提CPAN,這裏https://www.cpan.org 提供了非常豐富的Perl語言庫給我們。

功力尚淺,說的不對的地方還請指正。

最後更新:2017-07-02 11:27:14

  上一篇:go  Deepgreen & Greenplum DBA小白普及課之二(管理問題解答)
  下一篇:go  雲棲社區版權提示與說明