用一个简单的perl包轻松管理脚本中的软件调用
2014-08-17 23:22
906 查看
在用perl写的流程中,有人喜欢直接在脚本定义软件的路径,比如:
这样做,看着好像很省事的样子,但是当一个流程层次关系比较复杂时,而且当其中的路径失效时,麻烦来了:我们需要翻复杂的脚本,重新找到标量的定义,然后修改之。可是,当你把所有调用的软件路径写到配置文件中,并用perl package function调用,当路径失效时,我们只需要在配置文件中修改就可以了。
比如配置文件config.txt是这样的:
针对配置文件,我们可以写一个如下的名为Soft.pm的package:
那么怎么用这个package呢?
可以像正常的module调用那样,use module;
示例如下:
这样在流程中,看起来似乎多了许多行,但是这个package可以在不同的流程中反复调用,你只需要做好两件事情:
1,把Soft.pm 放到一个适当的位置,如果是调用流程的相对路径,就要用FindBin 模块,如果直接是一个固定的路径,可以这么写:
my $blastall="/opt/blc/genome/bin/blastall";
这样做,看着好像很省事的样子,但是当一个流程层次关系比较复杂时,而且当其中的路径失效时,麻烦来了:我们需要翻复杂的脚本,重新找到标量的定义,然后修改之。可是,当你把所有调用的软件路径写到配置文件中,并用perl package function调用,当路径失效时,我们只需要在配置文件中修改就可以了。
比如配置文件config.txt是这样的:
########################### #######software path####### ########################### prank=/nas/GAG_02/liushiping/GACP/software/evolution/prank-msa/src/prank GBlocks=/home/lixiangfeng/tools/Gblocks_0.91b/Gblocks codeml=/share/project002/zhangpei/bin/paml44/bin/codeml formatdb=/opt/blc/genome/bin/formatdb blastall=/opt/blc/genome/bin/blastall muscle=/opt/blc/genome/bin/muscle ########################### #######END################# ###########################
针对配置文件,我们可以写一个如下的名为Soft.pm的package:
################################################ ######This package contains the pathes of many softwares ######You can modify the config.txt when the software path changed ######Original from xiangfeng li,xflee0608@163.com ####################2014-7-5#################### package Soft; use strict; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(parse_config); ##parse the software.config file, and check the existence of each software ################################################ sub parse_config{ my ($config,$soft)=@_; open IN,$config || die; my %ha; while(<IN>){ chomp; next if /^#|^$/; s/\s+//g; my @p=split/=/,$_; $ha{$p[0]}=$p[1]; } close IN; if(exists $ha{$soft}){ if(-e $ha{$soft}){ return $ha{$soft}; }else{ die "\nConfig Error: $soft wrong path in $config\n"; } }else{ die "\nConfig Error: $soft not set in $config\n"; } } 1; __END__
那么怎么用这个package呢?
可以像正常的module调用那样,use module;
示例如下:
#! /usr/bin/perl -w use strict; use FindBin qw($Bin $Script); use lib $Bin; use Soft; ...... ...... my $config="$Bin/config.txt"; my $blastall=parse_config($config,"blastall"); ......
这样在流程中,看起来似乎多了许多行,但是这个package可以在不同的流程中反复调用,你只需要做好两件事情:
1,把Soft.pm 放到一个适当的位置,如果是调用流程的相对路径,就要用FindBin 模块,如果直接是一个固定的路径,可以这么写:
#! /usr/bin/perl -w use strict; use lib 'home/lxf/'; use Soft; ...... ...... my $config="home/lxf/config.txt"; my $blastall=parse_config($config,"blastall"); ......2.在config文件中按格式要求写好你常用软件的路径,这样管理脚本中涉及的软件路径,是不是很方便呢?
相关文章推荐
- 一个简单的学生成绩管理软件(ODBC开发)
- Java初学者:软件设计---一个简单的图书管理软件
- Android用File类写一个简单的文件管理软件
- 用perl脚本实现一个简单的行注释到块注释的转换
- [JS脚本][实用小软件]一个简单的汉字简体繁体转换工具源代码
- 一个简单的调用脚本文件的例子
- 写一个Perl包来负责流程调用软件
- 一个简单的Perl多线程脚本
- shell之ssh远程管理(这个脚本就是上一个jump.sh调用的脚本)
- 一个简单的ant调用bat脚本例子
- 一个mysql数据库的脚本帮助dba简单的管理数据库信息
- 一个简单的项目版本管理脚本
- JSPackager--- 一个简单、开放、无侵入的脚本管理框架
- 一个简单的学生成绩管理软件(ODBC开发)
- apache+php搭建一个简单的web环境【php调用脚本】
- [原创]一个简单实用的rss浏览脚本,也可以打开远程RSS.
- 用sqlite3数据库做了一个个人关系管理软件:)
- 发布一个客户关系管理软件及财务管理系统软件!
- 最近写了一个小的管理软件,其中在LOGO里加入了视频,这里讨论一下文件的保密
- 一个简单地vb开发多媒体播放器软件的方法 适用初学者 mci