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,这里http://www.cpan.org 提供了非常丰富的Perl语言库给我们。

功力尚浅,说的不对的地方还请指正。
时间: 2024-11-03 19:26:42

Perl语言面向对象入门的相关文章

Perl语言入门三部曲 附电子书下载_基础教程

第一本.<Perl语言入门(Learning Perl)> Perl语言入门 第六版中文pdf扫描版(Learning Perl, 6th Edition) http://www.jb51.net/books/44237.html 第二本.<Intermediate Perl> 下载地址: http://www.jb51.net/books/58888.html 第三本.<精通Perl (Mastering Perl)> 下载地址: http://www.jb51.ne

SQL语言快速入门(一)

sql语言|快速入门 SQL是英文Structured Query Language的缩写,意思为结构化查询语言.SQL语言的主要功能就是同各种数据库建立联系,进行沟通.按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言.SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等.目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准.虽然

SQL语言快速入门(三)

sql语言|快速入门 我们日常使用SQL语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息.下面,我们就来详细介绍一下如何使用SQL语言实现各种数据库查询操作. SELECT-FROM 为方便讲解,我们在数据库中创建名为Store_Information的如下数据表. Store_Information Store_Name Sales Date Los Angeles 00 Jan-10-2000 San Diego 0 Jan-11-2000 Los Angeles 0 Jan-

SQL语言快速入门(二)

sql语言|快速入门 创建表格 SQL语言中的create table语句被用来建立新的数据库表格.Create table语句的使用格式如下: create table tablename (column1 data type, column2 data type, column3 data type); 如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项: create table tablename (column1 data type [constraint], colu

SQL语言快速入门之一

sql语言|快速入门 SQL是英文Structured Query Language的缩写,意思为结构化查询语言.SQL语言的主要功能就是同各种数据库建立联系,进行沟通.按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言.SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等.目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准.虽然

SQL语言快速入门之二

sql语言|快速入门 创建表格 SQL语言中的create table语句被用来建立新的数据库表格.Create table语句的使用格式如下: create table tablename (column1 data type, column2 data type, column3 data type); 如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项: create table tablename (column1 data type [constraint], colu

SQL语言快速入门之三

sql语言|快速入门 我们日常使用SQL语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息.下面,我们就来详细介绍一下如何使用SQL语言实现各种数据库查询操作. SELECT-FROM 为方便讲解,我们在数据库中创建名为Store_Information的如下数据表. Store_Information Store_Name Sales Date Los Angeles $1500 Jan-10-2000 San Diego $250 Jan-11-2000 Los Angeles

C++面向对象入门~构造函数编译不通过

问题描述 C++面向对象入门~构造函数编译不通过 一个简单的面向对象入门,在codeblock上,构造函数的参数编译失败 #include <iostream>using namespace std;class Building{protected: string name; int floorNumroomAmount; float wholeArea;public: Building(string nint fint rfloat w) { this->name=n; this-&g

我所偏爱的 C 语言面向对象编程范式

我所偏爱的 C 语言面向对象编程范式 面向对象编程不是银弹.大部分场合,我对面向对象的使用非常谨慎,能不用则不用.相关的讨论就不展开了. 但是,某些场合下,采用面向对象的确是比较好的方案.比如 UI 框架,又比如 3d 渲染引擎中的场景管理.C 语言对面向对象编程并没有原生支持,但没有原生支持并不等于不适合用 C 写面向对象程序.反而,我们对具体实现方式有更多的选择. 大部分用 C 写面向对象程序的程序员受 C++ 影响颇深.企图用宏模拟出一个常见 C++ 编译器已经实现的对象模型.于我愚见,这