在UNIX/Linux下:
which perl,看是否有如下的输出
/usr/bin/perl
/usr/local/bin/perl
如果没有那只能进行安装了
如果已经安装了Perl,那么将你的perl脚本比如 foopl 现 chmod a+x foopl加上可执行权限,然后 /foopl 就可以了
在Windows上:
建议安装 ActivePerl,它会配置后所有的设置,然后再安装一个 PerlBuilder,在PerlBuilder中打开你的foopl脚本并运行就可以了。
#!/usr/bin/perl
require 'jcodepl';#引用jcodepl这个脚本中的内容,可以大致理解为和c中的include差不多,也就是使用jcodepl中的代码
use Text::ChaSen; #使用Text这个包中的ChaSen
Text::ChaSen::getopt_argv('chasen-perl','-c');
my $dir = "data";
opendir(DIR,$dir);#打开文件目录句柄
@files = sort grep (!/^\/,readdir(DIR)); #读取目录内容,并且找出其中非 和的文件名称,其中和 表示当前目录和上一级目录,然后对打开的目录内文件名排序
closedir(DIR); #关闭文件句柄
foreach my $file (@files){
&readfile($dir,$file); #调用readfile函数
}
sub readfile{
my ($dir,$file) = @_;#将传递进入的参数 目录名称和文件名保存到$dir 和$file两个变量
open(FF,$dir"/"$file) or die "$file not found";#打开目录和文件名组合成的文件,如果打开失败则提示文件没有找到
my %count = ();
while(<FF>){
chomp;
my $line = $_;
my $eucline = &jcode::euc($line); #这个因为是引用的jcodepl中的函数,不清楚是什么功能
my $code = Text::ChaSen::sparse_tostr($eucline);#这个函数我没有用过,不清楚是什么功能,不过看上去应该是将什么东西转换为字符串
my @a = split(/[\r\n]/,$code); #将得到的字符串按照换行进行分割并存到数组
for(my $i=0;$i<@a;$i++){
my @w = split(/[\s]+/,$a[$i]);#将按行分割之后的信息再按照空格进行分割,也就是得到每列的信息
if ((0<$w[3])&&($w[3]<=40)&&($w[3] != 19)){#如果第四列所得到的数组大于0且小于40并且不等于19,那么以$w[0]为键的hash就加1
$count{$w[0]}++;
}
}
}
因为不清楚其中有几个函数的功能,所以不好意思有的地方就不是太清晰,不过如果你能补充那几个函数的功能,我想这个脚本还是很好解释的。
不过看上去@w应该属于文件信息,猜测是统计文件大小小于40字节且大于0字节并且不为19字节的文件有哪些。不过如果能够告知一下那几个函数功能就更清楚啦。
调试通过的、确保正确的程序代码如下,请粘贴程序,输入可能会发生错误:
my %ARR1,%ARR2;
my $s,$k,$v,$i;
#读文件1
$k='';
$v='';
open(FD,'1txt');
while($s=<FD>){
$s =~ s/^\s+|\s+$//g;
if ($s =~ /^>/){
(undef,$k)=split(/\s+/,$s);
}else{
$v=$s;
$ARR1{$k}=$v;
}
}
close(FD);
#读文件2
$k='';
$v='';
open(FD,'2txt');
while($s=<FD>){
$s =~ s/^\s+|\s+$//g;
if ($s =~ /^>/){
(undef,undef,$k)=split(/\s+/,$s);
}else{
$v=$s;
$ARR2{$k}='|'$v;
}
}
close(FD);
#输出结果
foreach $k (keys(%ARR2)){
print "$k\n";
$i=1;
foreach $v (split(/\|/,substr($ARR2{$k},1))){
printf("I%03d%s\n",$i,$v);
printf("E%03d%s\n",$i,$ARR1{$k});
$i++;
}
}
运行过程:
E:\TEMP\文件>type 1txt
> 1_NC_008394
ATGTCGTCGCG
> 2_NC_008394
ACTCGCCCC
E:\TEMP\文件>type 2txt
> INTRON_1 1_NC_008394
gttcgcctactcc
> INTRON_2 1_NC_008394
gtgagttaattct
> INTRON_1 2_NC_008394
gtcagcattgc
E:\TEMP\文件>apl
1_NC_008394
I001gttcgcctactcc
E001ATGTCGTCGCG
I002gtgagttaattct
E002ATGTCGTCGCG
2_NC_008394
I001gtcagcattgc
E001ACTCGCCCC
E:\TEMP\文件>
这个程序首先要求你输入 3 个数字, 不够 3 个就报错挂掉
if( @ARGV !=3 ){
die( "$0: <d12> <d13> <d23> \n\n");
}
然後把 <d12> <d13> <d23>分别赋值到 $d12, $d13, $d23 这三个变量中
$d12 = $ARGV[0];$d13 = $ARGV[1];
$d23 = $ARGV[2];
然後在屏幕上打印出来
printf( "d12: $d12\n" ) ;printf( "d13: $d13\n" );
printf( "d23: $d23\n" );
再然後测试一下这三个数有没有合乎要求, 不对就报错挂掉
if( ((2$d12) >=$d13)&&((2$d12) >=$d23))
{
die( "$0:Element 3 does not appear to represent"
"the outgroup\n\n");
}
最後就对这三个变量进行混算处理, 最後输出结果
$dA1 = ($d12+$d13-$d23 )/2;$dA2 = ($d12+$d23-$d13 )/2;
printf( "dA1:$dA1\n" );
printf( "dA2:$dA2\n\n" );
不过由於原码写的有点冗赘, 所以我重写一个给你参巧
die( "$0: <d12> <d13> <d23>") unless @ARGV==3;($d12, $d13, $d23) = @ARGV;
print "d12:$d12, d13:$d13, d23:$d23$/";
# perl 建议我们, 如果可以用 print() 做到, 就不要用 printf()
if(((2$d12) >=$d13)&&((2$d12)>=$d23)) {
die( "$0:Element 3 does not appear to represent the outgroup$/");
}
$dA1 = ($d12+$d13-$d23)/2;
$dA2 = ($d12+$d23-$d13)/2;
print "dA1:$dA1, dA2:$dA2$/";
1、下载perl解释器(如:Active Perl v584)并安装好;
2、查看一下你的环境变量,确定perl的有关路径已经添加到变量PATH中,注意点击确定的方式退出,以使PATH设置生效;
3、在“运行”中打开cmd窗口,cd到你要处理的文件所在的路径;
4、将该pl拷贝到该文件夹;
5、在cmd中执行命令即可:
perl pl 要处理的文件名
以上就是关于Perl程序怎么用全部的内容,包括:Perl程序怎么用、perl 提取信息 讲解下程序、用perl程序处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)