今天看到一个perl面向对象编程的例子,充分体现了如何对数据进行封装;

自己模仿写一个读取配置文件的例子, 配置文件的内容如下

samtools_binary = /usr/bin/samtools

用=分隔,保存了每个软件可执行文件的绝对路径;

下面用perl 模块进行配置文件的读取, 模块名为config.pm

package config;

use strict;
use warnings FATAL => 'all'; sub new
{
my $self = {}; bless($self); return $self;
} sub read
{
my $self = shift;
my $config_filename = shift; my %config_values; open CFG, $config_filename or die "Error: Unable to open $config_filename\n";
while (<CFG>)
{
chomp;
next if /^#/;
next if /^\s*$/; my ($key, $value) = split /=/, $_, ; next if not defined $key;
next if not defined $value; $key =~ s/^\s*(\S+)\s*$/$/;
$value =~ s/^\s*(\S+)\s*$/$/; $config_values{$key} = $value;
}
close CFG;
$self->{'config_values'} = \%config_values;
$self->{'config_filename'} = $config_filename;
} sub get_value {
my $self = shift;
my $key = shift; my $config_values = $self->{'config_values'};
my $config_filename = $self->{'config_filename'}; defined $config_values->{$key} or die "Error:no values for $key at $config_filename\n";
return $config_values->{$key};
} ;

然后在脚本中调用这个模块

#!/usr/bin/perl

use lib qq{./};
use config; my $config = config->new;
my $config_filename = qq{config.txt};
$config->read($config_filename);
print $config->get_value(qq{samtools_binary});

在config.pm中,可以将config看作一个类,而new函数返回对该类的一个对象的引用;

在read函数中,通过在对象和我们真正想要读取的值之间添加一层哈希,对数据进行封装;

在看不到源代码的情况下,只能通过指定的get_value 方法读取配置文件中参数的值;

如果写成下面这样,就实现不了封装的效果

package config;

use strict;
use warnings FATAL => 'all'; sub new
{
my $self = {}; bless($self); return $self;
} sub read
{
my $self = shift;
my $config_filename = shift; my %config_values; open CFG, $config_filename or die "Error: Unable to open $config_filename\n";
while (<CFG>)
{
chomp;
next if /^#/;
next if /^\s*$/; my ($key, $value) = split /=/, $_, ; next if not defined $key;
next if not defined $value; $key =~ s/^\s*(\S+)\s*$/$/;
$value =~ s/^\s*(\S+)\s*$/$/; $self->{$key} = $value;
}
close CFG;
$self->{'config_filename'} = $config_filename;
} sub get_value {
my $self = shift;
my $key = shift; defined $self->{$key} or die "Error:no values for $key\n";
return $self->{$key};
} ;

  

perl 面向对象编程的更多相关文章

  1. Perl 面向对象编程的两种实现和比较:

    <pre name="code" class="html">https://www.ibm.com/developerworks/cn/linux/ ...

  2. perl面向对象

    来源: http://www.cnblogs.com/itech/archive/2012/08/21/2649580.html Perl面向对象     首先让我们来看看有关 Perl 面向对象编程 ...

  3. Perl 的面向对象编程

    转自 http://net.pku.edu.cn/~yhf/tutorial/perl/perl_13.html 拓展阅读 http://bbs.chinaunix.net/forum.php?mod ...

  4. perl5 第十三章 Perl的面向对象编程

    第十三章 Perl的面向对象编程 by flamephoenix 一.模块简介二.Perl中的类三.创建类四.构造函数 实例变量 五.方法六.方法的输出七.方法的调用八.重载九.析构函数十.继承十一. ...

  5. perl 面向对象 use base

    1.XXX.pm 文件里面的第一行要是:package XXX: 2.要有构造函数 sub new,实现如下: sub new { my $class = shift; # Get the reque ...

  6. Perl面向对象(2):对象

    本系列: Perl面向对象(1):从代码复用开始 Perl面向对象(2):对象 Perl面向对象(3):解构--对象销毁 第3篇依赖于第2篇,第2篇依赖于1篇. 已有的代码结构 现在有父类Animal ...

  7. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  8. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  9. PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程

    PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...

随机推荐

  1. Socket网络编程 详细过程(转)

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...

  2. echarts实现动态传入数据刷新【可执行】

    <!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</t ...

  3. Brocade300 commands

    aaaconfig                  Configure RADIUS for AAA servicesad                         Specifies all ...

  4. js需要学习的

    1.js作用域 2.html5和css3 3.js面向对象 4.js原生ajax 5.js与后端交互 6.html5手机移动端页面练习 7.jquery中的jQuery UI框架和jQuery Eas ...

  5. 多行文字在一个div中上下左右居中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. samba实现跨平台文件共享

    前言:Linux/Unix主机之间实现文件共享我们可以使用NFS,那么,Linux/Unix和Windows主机之间共享文件怎么实现呢,samba就是解决这个问题的. Windows网上邻居依赖的协议 ...

  7. 几行css3代码实现超炫加载动画

    之前为大家分享了css3实现的加载动画.今天为大家带来一款只需几行代码就可以实现超炫的动画加载特效.我们一起看下效果图: 在线预览   源码下载 实现代码: 极简的html代码: <div> ...

  8. 【火狐FireFox】同步失败后,书签被覆盖,如何恢复书签

    问题场景: 使用公司的电脑,下载安装火狐,登录个人帐号后,火狐会自动开始同步书签.但有时候会同步失败,比如登录之前选的是[本地服务],而最新的书签都是在[全球服务]理,那么很有可能同步到的是N久之前的 ...

  9. C语言 · 新建Microsoft Word文档

    算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出的题 ...

  10. java日期工具类DateUtil

    一名优秀的程序员,不仅需要有着丰富解决问题的方案,还需要的便是代码的沉淀,这不仅有助于自己快速的开发程序,也有利于保证程序的健壮.那如何才能沉淀自己的”代码“呢?从自己编写util开始其实就是一个不错 ...