2014-01-25 4 views
0

У меня есть массив, который содержит некоторые последовательности ДНК как строки, хранящиеся в его элементах.
Пример: print $array[0]; вывести такой вывод: ACTAG (# первая позиция в каждой последовательности).Индексирование значений строковых элементов из массива perl

Я написал этот код, который позволяет мне анализировать первую позицию для каждой последовательности.

#!/usr/bin/perl 
$infile = @ARGV[0]; 
$ws= $ARGV[1]; 
$wsnumber= $ARGV[2];     

open INFILE, $infile or die "Can't open $infile: $!";  # This opens file, but if file isn't there it mentions this will not open 

my $sequence =(); # This sequence variable stores the sequences from the .fasta file 
my $line;        # This reads the input file one-line-at-a-time 

while ($line = <INFILE>) { 
    chomp $line; 

    if ($ws ne "--ws=") { 
    print "no flag or invalid flag\n"; 
    last; 
    } 
    else { 
     if($line =~ /^\s*$/) {   # This finds lines with whitespaces from the beginning to the ending of the sequence. Removes blank line. 
     next; 

    } elsif($line =~ /^\s*#/) {  # This finds lines with spaces before the hash character. Removes .fasta comment 
     next; 
    } elsif($line =~ /^>/) {   # This finds lines with the '>' symbol at beginning of label. Removes .fasta label 
     next; 
    } else { 
     $sequence = $line; 

    $sequence =~ s/\s//g;    # Whitespace characters are removed 


    @array = split //,$sequence; 
    $seqlength = length($sequence);} 
} 

    $count=0; 
foreach ($array[0]){ 
    if($array[0] !~ m/A|T|C|G/){ 
     next; 
     } 
    else { 
     $count += 1; 
     $suma += $count; 

     } 
    } 
} 

Но я не знаю, как изменить $ массива [0] для выполнения этого кода для каждой позиции (я только успел сделать это для конкретного постиона (в приведенном выше примере для первой позиции .?)

Может кто-то помочь мне Спасибо

+0

** ВСЕГДА ** 'использовать строгий; используйте предупреждения; ' – Toto

ответ

0

Вы только глядя на один из элементов в массиве:

foreach ($array[0]){ ... } 

Для перебора всего использования массива:

my @array = qw(ATTTCFCGGCTTA); 

foreach (@array){ 
    my @split = split(''); 
    foreach (@split){ 
     die "$_ is not a valid character\n" unless /[ATGC]/; 
     print "$_\n"; 
    } 
} 
+0

ok Я думаю, что он должен работать, но он не работает. Я печатаю «$ _ \ n», и я думаю, что $ _ хранит каждое положение моих последовательностей. Я редактировал свой пост и вставлял весь код. Вы можете посмотреть на это, пожалуйста? Большое спасибо! – userbio

+0

@userbio - Я не уверен, что понимаю. См. Обновление – fugu

+0

Я только что заметил, что мой @array не содержит одну последовательность по элементу. Все последовательности находятся в 1 элементе. ТАК, как я могу это решить? Извините ... – userbio

0

Не уверен, что я хорошо понимаю, но это то, что вы хотите?

Предполагая, что @array содержит одну последовательность элементов.

foreach my $seq(@array) { 
    my @chars = split '', $seq; 
    foreach my $char(@char) { 
     if ($char =~ /[ATCG]/) { 
      # do stuff 
     } 
    } 
} 
+0

mmm Я не знаю, почему он не работает, потому что я думаю, что он должен работать. Можете ли вы снова взглянуть на мой пост? Я редактировал его и вставлял весь мой код. Спасибо! – userbio

+0

Я только что заметил, что мой @array не содержит одну последовательность по элементу. Все последовательности находятся в 1 элементе. ТАК, как я могу это решить? – userbio

Смежные вопросы