Perl语言面向对象入门

简介: 通过一些简单代码来展示一下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语言库给我们。

功力尚浅,说的不对的地方还请指正。
目录
相关文章
|
8月前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 5
Perl的面向对象编程涉及匿名哈希表或数组来存储对象属性。类通过`@ISA`数组实现继承,如Employee继承Person。在Employee.pm中声明`@ISA = qw(Person)`。在main.pl中,创建Employee对象并调用方法,显示继承功能。程序输出显示姓名的变化。
76 0
|
Java PHP 开发工具
编程语言Clojure入门
在众多的编程语言中,不少开发人员熟悉Java、C#、PHP等。但是很早以前,也有一些小众的语言,比如Lisp语言,它是一种适用于符号处理和自动推理的编程语言,内部使用表结构来表达非数值计算。而Clojure语言是在JVM上实现的Lisp风格的语言,语法与Lisp类似,且可以和Java语言进行互操作
1344 0
编程语言Clojure入门
|
5月前
|
数据安全/隐私保护 Ruby
深入解析Ruby 面向对象
【8月更文挑战第28天】
59 8
|
4月前
|
设计模式 安全 开发者
探索研究Perl 面向对象
【9月更文挑战第18天】
48 7
|
6月前
|
Unix Linux 开发者
Perl 语言入门学习
Perl 语言入门学习
|
7月前
|
网络协议 Unix Shell
技术笔记:perl语言入门(转)
技术笔记:perl语言入门(转)
35 0
|
8月前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 6
Perl 面向对象编程有两种实现:匿名哈希表和数组方式。教程中展示了基于哈希表的继承示例,Employee 类继承并重写了 Person 类的方法。在Employee中,`new`构造函数被重写,添加了新属性,`getFirstName`被重写,还新增了`setLastName`和`getLastName`方法。在主程序中,创建Employee对象并调用这些方法,显示了方法重写和辅助函数的使用效果。
52 3
|
8月前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 1
Perl的面向对象编程涉及两种实现:使用匿名哈希表存储对象属性的引用,或使用数组为每个属性创建行索引。对象是类的实例,类是包含方法的Perl包。方法是接受对象或类名作为首参的子程序。`bless()`函数用于构建对象,将引用与类关联。
37 3
|
8月前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 3
Perl的面向对象编程涉及两种实现:匿名哈希表引用和数组引用。对象是类(Perl包)中数据项的引用,方法是接收类名或对象作首参的子程序。
49 3
|
8月前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 4
Perl的面向对象涉及两种对象实现:匿名哈希表和数组。对象是类的实例,类是包含方法的Perl包。方法是接收对象引用作为首参的子程序。`bless()`函数用于构造对象。以下是一个Person类的例子,包含`new`构造器、`getFirstName`和`setFirstName`方法。在`employee.pl`脚本中,创建Person对象并演示了方法的使用。输出显示了姓名的设置和获取过程。
48 2