Hello all,
I need a bit of help implementing a circular list or perhaps a circular iteration( whichever can get the job done)
What is required 
For a given peptide string , find all the possible sub-peptides including single amino acids and print their masses.
For example's sake let's say A = 1, B = 2, C = 3, D = 4
eg
Input: A cyclic peptide :
ABCD
Output
A  B  C  D  AB  BC  CD  DA  ABC  BCD  CDA  DABC  
1  2  3  4  3   5   7   5   6    9    8    10
I initially tried implementing a simple substr based approach. The pseudocode is as under. So it is untested:
my $i =0;
my $j = 1;
my %peptide;
my $len = length $_; # $_ being the input peptide string
while( $i <= $len-1 ) {
       my $mass = 0;
       while( $j <= $len-1 ){
            my $substr = substr $_, $i, $j   if ( $i != $len -1 && $j  < $len-1 )
            my $amino_acid_mass = subMass ($substr) ;
            my $mass += $amino_acid_mass; 
            push @{$peptide{$mass}}, $substr ; # because multiple sub-peptides can have same mass
            $j++;
           #To perform a very poor version of circular iteration
           #if at last element 'N' , take out that element + add it to first  'N-2' elements
           if( $j == $len-1 && $i == $len ){
                     my $substr_L = substr $_, $i, 1;# last 1 element
                     my $substr_F = substr $_, 0, $j-2  #first 2 elements
                     my $string = $substr_L.$substr_F # append
                     #Extract mass and add to the %peptide hash
                    }
          }
       $i++;
      }
Clearly this isn't the most elegant nor a fully working idea. It would break easily at peptide length > 3 ( 0,1,2,3). Furthermore, even the subroutine will break quickly as I realized later that a variable length $substr would be its input.
So I thought perhaps I should implement an array. I searched on how to implement a circular array. This is what I came up with after finding a bit of hint in the Perl Cookbook online... :
my @arr = qw/A B C D/;
my $i = 0;
while($i <= $#arr ){
    unshift(@arr, pop(@arr) );
    say "@arr";
    my $y = 0;
    my $z = 1;
    foreach (@arr){
        say "Element : $_";
        say "2 elements: $arr[$y]$arr[$z] " if exists $arr[$z];
        $y++;
        $z++;
    }                
    $i++;
}
But really I am stuck now and just cannot figure out what to do next or how to proceed further. I would be really grateful for any help or guidance.
This looks like one of the assignments from Bioinformatics Algorithms on coursera
It does...I want to get better at programming. I am stuck in this...
Right now I am just thinking of working on the assignments ;)
Yes !! And we may get many questions here from Coursera Assignments !! ;)
Ah so long as one wants to improve!