У меня есть хеш с именем %id2seq
, который содержит последовательности последовательностей ДНК, на которые ссылается ключ $id
. Я хочу иметь возможность манипулировать последовательностями ДНК, используя позицию в строке в качестве ссылки. Например, если бы моя последовательность ДНК была ACGTG
, мои $id
были бы Sequence 1
, мои $id2seq{'Sequence 1'}
были бы ACGTG
, а мои "теоретические" $id2seq{'Sequence 1'}[3]
были бы G
.
Я пытаюсь создать хеш массивов для этого, но получаю странный вывод (см. Вывод ниже). Я уверен, что это только мое форматирование. Любые входные данные полезны, и я ценю это заранее.
Вот фрагмент входного файла:
>Sequence 1
TCAGAACCAGTTATAAATTTATCATTTCCTTCTCCACTCCT
>Sequence 2
CCCACGCAGCCGCCCTCCTCCCCGGTCACTGACTGGTCCTG
>Sequence 3
TCGACCCTCTGGAACCTATCAGGGACCACAGTCAGCCAGGCAAG
Вот фрагмент моей попытки на данный момент. (У меня есть хеш-таблица, которая обращается к файлу с закомментированными последовательностями ДНК):
use strict;
use warnings;
print "Please enter the filename of the fasta sequence data: ";
my $filename1 = <STDIN>;
#Remove newline from file
chomp $filename1;
#Open the file and store each dna seq in hash
my %id2seq = ();
my $id = '';
open (FILE, '<', $filename1) or die "Cannot open $filename1.",$!;
my $dna;
while (<FILE>)
{
if($_ =~ /^>(.+)/)
{
$id = $1;
}
else
{
## $id2seq{$id} = $_; used to create hash table
@seqs = split '', $_;
$id2seq{$id} = [ @seqs ];
}
}
close FILE;
foreach $id (keys %id2seq)
{
print "$id2seq{$id}[@seqs]\n\n";
}
выход
Use of unitialized value in concatenation (.) or string at line 37.
T
G
A
T
T