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 的一条基本原则是计算 ...
随机推荐
- C语言 函数参数不确定时 需要用到va_start和va_end函数
1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表 void foo(...);void foo(parm_list,...); 这种方式和我们以前认识的不大一样,但我 ...
- Notes on PEP333 (Python Web Server Gateway Interface)
This note is about PEP3333- Python Web Server Gateway Interface. Refer to (Source: http://legacy.pyt ...
- 【Android】9.2 内置行视图的分类和呈现效果
分类:C#.Android.VS2015: 创建日期:2016-02-18 一.简介 Android内置了很多行视图模板,在应用程序中可直接使用这些内置的视图来呈现列表项. 要在ListView中使用 ...
- 【Android】7.7 以后改为在Win10下开发了
分类:C#.Android.VS2015: 创建日期:2016-02-12 修改日期:2016-02-13 一.鼠标点击时千万别一心二用 在Win10升级提醒不厌其烦的持续轰炸下,今天看手机时一不留神 ...
- Java高级面试题积累(二)
简述23种设计 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口.而无需指定它们详细的类. 适配器模式(Adapter):将一个类的接口转换成客户希望的另外 ...
- JIT编译器
深入理解Java Class文件格式(九) http://blog.csdn.net/zhangjg_blog/article/details/22432599 http://blog.csdn.ne ...
- iOS网络_优化请求性能
iOS网络_优化请求性能 一,度量网络性能 1,网络带宽 用于描述无线网络性能的最常见度量指标就是带宽.在数字无线通信中,网络带宽可以 描述为两个端点之间的通信通道每秒钟可以传输的位数.现代无线网络所 ...
- WebForm中使用MVC
http://www.cnblogs.com/encoding/articles/3556046.html ********************************************** ...
- LeetCode: Rotate List 解题报告
Rotate List Given a list, rotate the list to the right by k places, where k is non-negative. For exa ...
- layer返璞归真
返璞归真 前端社区正在变得日渐喧嚣,我们似乎很难停下追逐的脚步.而Layui偏偏回望当初,奔赴在返璞归真的漫漫征途,自信并勇敢着,追寻于原生态的书写指令,试图以最简单的方式诠释高效