perl脚本问题求助

hankn 发布于 2016/06/18 11:15
阅读 599
收藏 0

找到了脚本maskedByGff.pl,内容如下:

#!/usr/bin/perl
 use strict;
 my $usage = "USAGE:\n\tperl maskedByGff.pl file.gff genome.fasta\n";
 unless (@ARGV) { print $usage; exit }

open GFF, '<', $ARGV[0];
 open FASTA, '<', $ARGV[1];

my $fasta_head;
 my %fasta;
 while (<FASTA>) {
  chomp;
  if (/^>/) {
   $fasta_head = $_;
   $fasta_head =~ s/>//;
  }else {
   $fasta{$fasta_head} .= $_;
  }
 }

while (<GFF>) {
  if (/(.+)\t.+\t.+\t(.+)\t(.+)\t.+\t.+\t.+\t.+/) {
   my $id = $1;
   my $start = $2 - 1;
   my $length = $3 - $start;
   substr($fasta{$id},$start,$length) =~ s/\w/N/g;
  }
 }

my @fasta_head = keys %fasta;
 my %fasta_head;
 foreach (@fasta_head) {
  if (/(\d+)/) { $fasta_head{$_} = $1 }
 }

@fasta_head = sort { $fasta_head{$a} <=> $fasta_head{$b} } @fasta_head;

foreach (@fasta_head) {
 print ">$_\n$fasta{$_}\n";
 }

但是运行后出现警告:substr outside of string at ../maskedByGff.pl line 26, <GFF> line 2.

这种情况怎么解决,perl未入门,但是最近急于完成任务,希望大神们能帮下忙,谢谢!

加载中
0
yak
yak
$start 超过$fasta{$id}的长度了  把 $fasta{$id} 和$start分别打印出来看看
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部