如何在Perl中将字符串读入哈希值

时间:2016-11-21 15:23:05

标签: perl bioinformatics

我有一个带有一系列随机A,G,C和T的文件,它们看起来像这样:

>Mary
ACGTACGTACGTAC
>Jane
CCCGGCCCCTA
>Arthur
AAAAAAAAAAT

我拿了这些信件并将它们连在一起以最终ACGTACGTACGTACCCCGGCCCCTAAAAAAAAAAT。我现在在这个连接序列中有一系列我感兴趣的位置,我想找到与这些位置(坐标)匹配的相关名称。我正在使用Perl函数长度来计算每个序列的legnth,然后将culmulative长度与散列中的名称相关联。 到目前为止,我有:

#! /usr/bin/perl -w
use strict;

my $seq_input = $ARGV[0]; 
my $coord_input = $ARGV[1]; 
my %idSeq; #Stores sequence and associated ID's.

open (my $INPUT, "<$seq_input") or die "unable to open $seq_input";
open (my $COORD, "<$coord_input") or die "unable to open $fcoord_input";

while (<$INPUT>) {
    if ($_ = /^[AGCT/) {
    $idSeq{$_

my $id = ( /^[>]/) 

#put information into a hash
#loop through hash looking for coordinates that are lower than the culmulative length

foreach $id
 $totallength = $totallength + length($seq)
 $lengthId{$totalLength} = $id
foreach $position
 foreach $length
  if ($length >= $position) { print; last }

close $fasta_input;
close $coord_input;
print "Done!\n";

到目前为止,我无法将文件读入哈希值。我还需要一个数组来打印哈希吗?

1 个答案:

答案 0 :(得分:2)

不完全清楚你想要什么;也许这个:

my $seq;
my %idSeq;
while ( my $line = <$INPUT> ) {
    if ( my ($name) = $line =~ /^>(.*)/ ) {
        $idSeq{$name} = length $seq || 0;
    }
    else {
        chomp $line;
        $seq .= $line;
    }
}

产生:

$seq = 'ACGTACGTACGTACCCCGGCCCCTAAAAAAAAAAAT';
%idSeq = (
      'Mary' => 0,
      'Jane' => 14,
      'Arthur' => 25,
);