perl 面向对象编程
今天看到一个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 面向对象编程的更多相关文章
- Perl 面向对象编程的两种实现和比较:
<pre name="code" class="html">https://www.ibm.com/developerworks/cn/linux/ ...
- perl面向对象
来源: http://www.cnblogs.com/itech/archive/2012/08/21/2649580.html Perl面向对象 首先让我们来看看有关 Perl 面向对象编程 ...
- Perl 的面向对象编程
转自 http://net.pku.edu.cn/~yhf/tutorial/perl/perl_13.html 拓展阅读 http://bbs.chinaunix.net/forum.php?mod ...
- perl5 第十三章 Perl的面向对象编程
第十三章 Perl的面向对象编程 by flamephoenix 一.模块简介二.Perl中的类三.创建类四.构造函数 实例变量 五.方法六.方法的输出七.方法的调用八.重载九.析构函数十.继承十一. ...
- perl 面向对象 use base
1.XXX.pm 文件里面的第一行要是:package XXX: 2.要有构造函数 sub new,实现如下: sub new { my $class = shift; # Get the reque ...
- Perl面向对象(2):对象
本系列: Perl面向对象(1):从代码复用开始 Perl面向对象(2):对象 Perl面向对象(3):解构--对象销毁 第3篇依赖于第2篇,第2篇依赖于1篇. 已有的代码结构 现在有父类Animal ...
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程
PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...
随机推荐
- mysql执行计划介绍
简单讲讲mysql的执行计划,只列出了一些常见的情况,希望对大家有所帮助 烂sql不仅直接影响sql的响应时间,更影响db的性能,导致其它正常的sql响应时间变长.如何写好sql,学会看执行计划至 ...
- [svc]mousedos网络批量部署xp
小时候对这个东西很好奇,不知道什么原理.一直觉得很好玩.现在研究了下,总结如下 软件的操作步骤很讲究,稍微不慎,则就需要重新来过 知识点: 1,掌握诺顿ghost分区为gh文件 2,学会清理至一个干净 ...
- 【Android】10.5 滚动视图(RecyclerView)
分类:C#.Android.VS2015: 创建日期:2016-02-19 一.简介 滚动视图(RecyclerView)的用法与布局控件的用法类似,唯一不同的是,所有布局控件中都可以包含多个组件,而 ...
- 【Android】7.1 布局控件常用的公共属性
分类:C#.Android.VS2015: 创建日期:2016-02-10 一.简介 Android应用程序中的布局控件都是容器控件,用于控制子元素的排列和放置方式.Android提供的布局控件有: ...
- 【Android】自己定义ListView的Adapter报空指针异常解决方法
刚刚使用ViewHolder的方法拉取ListView的数据,可是总会报异常. 细致查看代码.都正确. 后来打开adapter类,发现getView的返回值为null. 即return null. 将 ...
- cocos2d-x中几种存储数据的方式
说明:本文所论述内容均基于cocos2dx 3.0 版本. 1.UserDefault 它是cocos2d-x用来存取基本数据类型用的.保存为XML文件格式. 查看CCUserDefault文件,可以 ...
- C++编程思想
写在前面的话:自己看书的时候不是太习惯边看边做上面的例子,因为感觉那样子看书太慢了,但是这样子又会因为看的太快,之后什么都记不住,所以就想写写读书笔记 第六章
- c# 操作Word总结【转】
http://www.cnblogs.com/eye-like/p/4121219.html 在医疗管理系统中为保存患者的体检和治疗记录,方便以后的医生或其他人查看.当把数据保存到数据库中,需要新建很 ...
- Java代码编写的30条建议
1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如: ThisIsAClassName thisIsM ...
- MFC和GTK的区别
关键技术 http://blog.csdn.net/master_max/article/details/1540204 MFC和GTK的区别?? 1. 两者都是基于面向对象设计的.尽管MFC是用C+ ...