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 的一条基本原则是计算 ...
随机推荐
- [转]WCF类型共享技巧
调用过WCF服务的同学可能都会遇到这样的问题,同一个实体类型,不同的服务Visual Studio生成了不同的版本,例如Service1.User和Service2.User,对于C#来说,这是两个不 ...
- PHP函数之类
if(isset($_POST['dosubmit'])) { } 打散 $array_urls = explode("\r\n",$inurl_str); foreach ($a ...
- 关于Solr6.0中solrj使用简单例子
solr6.0的solrJ接口有部分变化,下面列出了简单的使用实例,有需要的朋友可以参考下. package com.ailk.solr6; import java.io.IOException; i ...
- Python 部署 flask 用uwsgi和nginx
安装uwsgi nginx 具体方法请百度 1.在项目目录下建立.ini文件 xad_uwsgi.ini [uwsgi] master=true #项目目录 chdir=/root/zhaoyingj ...
- java 读取execl文件
java 中读取execl文件是必要功能,下面说下几种读取方式 1.jxl (支持2003 不支持 2007 貌似最新版支持) /** * 规则设置的模板导入 * @param fi ...
- PowerShell实现基于SharePoint的网站HomePage Auto-Configure Solution
Home Page Web Parts Auto-Configuration PS:该项目为公司项目,我还是给他的名字屏蔽掉吧,这是我用PowerShell写的一个自动化升级工具,此为三部自动化工具的 ...
- 在java web中获取该项目的根路径
在jsp页面中: <% String path = application.getRealPath("").replace("\\","\\\\ ...
- iOS--崩溃日志的格式化分析---格式化crash日志
工作中难免或碰到crash,如果是开发环境,碰到简单的crash还能重现下,如果不能重现的话,我们只能去分crash文件了. 首先看下面的crash问题,说句实话一看这个我是拒绝的,这怎么找原因啊,头 ...
- MFC和GTK的区别
关键技术 http://blog.csdn.net/master_max/article/details/1540204 MFC和GTK的区别?? 1. 两者都是基于面向对象设计的.尽管MFC是用C+ ...
- CSS3 Transitions属性打造动画的下载按钮特效
一个网站的下载按钮应尽量吸引读者的注意. 这意味着网页设计师应该非常重视文件的下载界面.一个页面这么多的文件,如图片,视频和插件可以通过直接HTTP下载共享.许多免费网站甚至发布图标集和PSD文件供用 ...