아래 코드는 다음 결과를 얻습니다. 예를 들어 문자열의 점 사이에서 키와 값을 선택하여 해시 만들기
와$seq
세트
aaaGACGTCaaaGAATTCaaaGACGTCaaa
에 :
RE: AatII
GACGTC found at 4-9
GACGTC found at 22-27
RE: EcoRI
GACGTC found at 4-9
GACGTC found at 22-27
GAATTC found at 13-18
이 내가 달성하고자하는 것과 아주 가까이있는 동안은, 내가 정말하고 싶은 것은 "참조 효소"의 목록을 사용하는 것입니다 - 어떤 I 해시 키 (예 : AatII
및 EcoRI
: %RE
)에 저장 - $seq
시퀀스 문자열에서 가장 잘린 사이트를 찾고 결과를 해시와 같은 데이터 구조에 저장하려면
해독 사이트 선택은 해시의 각 참조 효소 키에 대한 연관된 "효소 문자열"값에 따라 수행됩니다. 아래 코드에서 키 AatII
은 GACGTC 5
으로 설정됩니다. 다섯 번째 위치 이후에 GACGTC
을자를 것입니다 : (GACGT|C
); EcoRI => GAATTC 1
은 첫 번째 위치 (G|AATTC
) 뒤에 GAATTC
시퀀스를 분할합니다. 그래서, 내 해시에있는 각 효소 키에 대해 해당 키의 해시 값에 해당 문자열과 관련된 숫자의 키와 연관된 문자열과 "잘라 사이트"를 기반으로 시퀀스 $seq
에있는 사이트를 찾습니다. 번호는 효소 문자열의 "1"위치 다음에 절단 위치를 나타냅니다.
시퀀스 $seq
의 경우 결과는 (aaaGACGT)(CaaaG)(AATTCaaaGACGT)(Caaa)
입니다. 여기에서 대괄호는 절단 점을 표시하는 데 사용됩니다. aaaGACGT CaaaG AATTCaaaGACGT Caaa
0------8 9---13 14----------26 27--30
이가 떠나 전체 순서를 효소 시퀀스를 선택하고 잘라 모두 EcoRI
및 AatII
를 사용하여 스크립트의 실행을 기반으로 다음과 같이 문자열의 절단 부위의 위치는 것
내 스크립트에서 각 실행 결과를 {0=>8, 9=>13, 14=>26, 27=>30}
과 같은 키/값이 포함 된 해시에 저장하고 싶습니다. 내 키에 sort
을 사용하고 각 반복 후에 을 사용하여; 가장 가까운 이전 컷 사이트를 찾기 위해 이진 검색을 사용하고 현재 반복에서 $end
의 값이되도록 "1"을 추가하면 해시에 cutsites가있는 수만큼의 항목이 있어야합니다.
이것이 가능한지 확실하지 않습니다. 그렇다면 누군가가 올바른 방향으로 나를 가리킬 수있는 방법이 문제에 접근하기 위해 누군가가 내 코드를 변환하도록 도울 수 있습니까?
#!/usr/bin/perl
use warnings;
use strict;
my %RE =('AatII' => 'GACGTC 5', 'EcoRI' => 'GAATTC 1');
my $input='';
my @matches =();
my @enz = keys %RE;
my @value = values %RE;
print "Seq:";
my $seq = <STDIN>;
chomp $seq;
print "OK \n";
while ($input ne 'quit') {
print "RE:";
$input = <STDIN>;
chomp $input;
foreach (@enz) {
if ($input =~ /$_/) {
#print "Key:", $_," Value:", $RE{$_};
my @seqval = $seq;
my $val = $RE{$_};
my $real = substr($val, 0, -2);
#my $cut = substr($val, 0, (length($val)-3));
my $cut = chop $val;
my $length = length ($real);
my $mew = substr ($real, 0, $cut);
my $two = substr ($real, -1, ($length-$cut));
#my $push = push @valval;
#chomp %RE{$_};
while ($seq =~ /($real)/g) {
my $match = $1;
#print "$match", "\n";
my $length = length($&);
#print "$length", "\n";
my $pos = length($`);
#print "$pos", "\n";
my $start = $pos + 1;
#print "$start", "\n";
my $end = $pos + $length;
#print "$end", "\n";
my $hitpos = "$start-$end";
#print "$hitpos", "\n";
push @matches, "$match found at $hitpos ";
#print "\tfound:", "\n","\n";
#print "\t\t\t$1$mew", "\n";
#print "\t\t\t$two$3", "\n";
#print "next restriction enzyme:","\n";
} print "$_\n" foreach @matches;
}
}
}
좋은 출발점 : http://www.bioperl.org/wiki/Main_Page –
해시 키를 정렬 할 수 없습니다. 배열이 필요합니다. – user1937198
결과에서 원하는 것을 완전히 이해하고 있는지 잘 모르겠습니다. 'key'가 '0'이고 'value'가 '8'('{0 => 8, ...} ') 인 해시를 원하십니까? 기타.)? –