Perl程序怎么用

Perl程序怎么用,第1张

在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程序处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9760129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存