Question: Hello everyone.

I need a code that can give me chunks of secondary structure elements from a given RNA structure and its sequence. e.g. if I have a sequence and its structure like this:

sequence: UGCCCUAGUACGAGAGGACCGGAGUG

Structure: `...(((........))).........`

I should be able to get the output like:

```
Loop1: UGC
Loop2: AGUACGAG
Loop3:GGAGUG
Stem1: CCUAGG
```

The position of every dot corresponds to the position of it respective nucleotide. I have written this code but it gives me all the nucleotides which form loop as one string and all those forming stems as one string. I want fragments.

Answer: So, just for my own perl coding practice, I wrote the following code that will do what you want (without explicit debugging though...). This programme will take in one file, where the first line is the sequence and the second line is the structure, and generate the required output

```
#!/usr/bin/perl
use warnings;
use strict;
open FILE, "<", $ARGV[0] or die $!;
my $count = 0;
my $seq;
my $structString;
while () {
if($count == 0){
$seq = ($_);
$count = 1;
}elsif($count==1){
$structString = ($_);
last;
}
}
close FILE;
my @seqCharacter = split //, $seq;
my @structChar = split //, $structString;
my $loopCount=1;
my $stemCount=1;
my $currentLoop="";
my @stemStore;
my @stemName;
my $prevChar="";

for(my $i = 0; $i < @structChar; $i=$i+1){
if($prevChar eq ""){ #The first character
if($structChar[$i] eq "."){
$currentLoop = $seqCharacter[$i];
$prevChar = ".";
}elsif($structChar[$i] eq "("){
$stemStore[0]=$seqCharacter[$i];
$stemName[0] = "stem".$stemCount;
$stemCount=$stemCount+1;
$prevChar="(";
}else{
print "Undefined input, structure must start with either ( or .\n";
die;
}
}elsif($prevChar eq "." && $structChar[$i] eq "."){ #Continuation
$currentLoop=$currentLoop.$seqCharacter[$i];
}elsif($prevChar eq "." && $structChar[$i] eq "("){ #Encounter stem
print "loop".$loopCount.": ".$currentLoop."\n";
$loopCount = $loopCount+1;
$currentLoop = "";
$prevChar = "(";
my $size = @stemStore;
$stemStore[$size]=$seqCharacter[$i]; #we have a new stem
$stemName[$size] = "stem".$stemCount;
$stemCount = $stemCount+1;
}elsif($prevChar eq "." && $structChar[$i] eq ")"){
if(@stemStore == 0){
print "Unmatched ) please check your input\n";
die;
}else{
print "loop".$loopCount.": ".$currentLoop."\n";
$loopCount = $loopCount+1;
$currentLoop = "";

$stemStore[@stemStore-1]=$stemStore[@stemStore-1].$seqCharacter[$i]; #Add this to the last loop so we can close it
$prevChar = ")";
}
}elsif($prevChar eq "(" && $structChar[$i] eq "("){
$stemStore[@stemStore-1]=$stemStore[@stemStore-1].$seqCharacter[$i]; #Continue
}elsif($prevChar eq "(" && $structChar[$i] eq "."){
$prevChar = ".";
$currentLoop = $seqCharacter[$i];

}elsif($prevChar eq "(" && $structChar[$i] eq ")"){
$prevChar = ")";
$stemStore[@stemStore-1]=$stemStore[@stemStore-1].$seqCharacter[$i];
}elsif($prevChar eq ")" && $structChar[$i] eq ")"){
$stemStore[@stemStore-1]=$stemStore[@stemStore-1].$seqCharacter[$i]; #Add to the last loop
}elsif($prevChar eq ")" && $structChar[$i] eq "."){
$prevChar = ".";
print $stemName[@stemName-1].": ".$stemStore[@stemStore-1]."\n";
pop(@stemName);
pop(@stemStore);
}elsif($prevChar eq ")" && $structChar[$i] eq "("){
$prevChar = ")";
print $stemName[@stemName-1].": ".$stemStore[@stemStore-1]."\n";
pop(@stemName);
pop(@stemStore);
}
}
#output remaining
if($currentLoop ne ""){
print "loop".$loopCount.": ".$currentLoop."\n";
}elsif(@stemName != 0 && $prevChar eq ")"){
print $stemName[@stemName-1].": ".$stemStore[@stemStore-1]."\n";
pop(@stemName);
pop(@stemStore);
}else{
print "There are unmatched stem remaining\n";
}
```