今天看到一个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. Spring 一二事(7) - annotation

    之前的文章大多都是一带而过,一方面比较简单,一方面不是用的注解形式 在企业开发中,主要还是使用的注解来进行开发的 1 <!-- component:把一个类放入到spring容器中,该类就是一个 ...

  2. Netlink 内核实现分析(二):通信

    在前一篇博文<Netlink 内核实现分析(一):创建>中已经较为具体的分析了Linux内核netlink子系统的初始化流程.内核netlink套接字的创建.应用层netlink套接字的创 ...

  3. ubuntu root权限

    ubuntu-kylin@ubuntu-kylin:~$ sudo passwd root 输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:已成功更新密码 ubuntu-ky ...

  4. 中间件监控之tomcat

    中间件主要目的:能够支持更多人去访问 一.Tomcat 介绍 Tomcat 是一个小型的轻量级应用服务器,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP页面和Serv ...

  5. hdoj1257 最少拦截系统

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  6. python——内置函数和lambda匿名函数

    内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...

  7. scrollTop兼容封装

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. LeetCode: Anagrams 解题报告

    AnagramsGiven an array of strings, return all groups of strings that are anagrams. Note: All inputs ...

  9. dp之分组背包hdu3535(推荐)

    题意:有0,1,2三种任务,0任务中的任务至少得完成一件,1中的任务最多完成1件,2中的任务随便做.每一个任务最多只能做一次 .n代表有n组任务,t代表有t分钟,m代表这组任务有m个子任务,s代表这m ...

  10. python学习笔记(15)--pygame的安装

    说明: 1. 现在是2017.3.9号,最新的python版本是3.6,最新的pygame是1.9.3,这两个最好都用32位的. 2. pygame1.9.3下载地址:http://www.lfd.u ...