Let's say I have string of length in multiple of 3.
my $seq = "CTTCGAATT"; # in this case length of 9
Is there a way I can split it into equal length of 3? Such that in the end I have this array:
$VAR = ["CTT", "CGA", "ATT"];
Let's say I have string of length in multiple of 3.
my $seq = "CTTCGAATT"; # in this case length of 9
Is there a way I can split it into equal length of 3? Such that in the end I have this array:
$VAR = ["CTT", "CGA", "ATT"];
Take a look at the solution at How can I split a string into chunks of two characters each in Perl?
Especially the unpack
might be interesting:
my @codons = unpack("(A3)*", $seq);
my $str='ABCDEFGHIJKLM';
we can use string match to get parts from the string, where minimum length is 1 and maximum is the required length, 3 or 4 or whatever
@parts = $str =~ /(.{1,4})/g;
and we get @parts = ['ABCD', 'EFGH', 'IJKL', 'M']
Iterate over multiples of three, using substr
to get pieces to push
into a list.
my $str = join '', map { ('A','T','C','G')[ rand 4 ] } 0 .. 900 ; # Random string
my @codons = $str =~ /[ACTG]{3}/g; # Process in chunks of three
# '/g' flag necessary
print 'Size of @codons array : ',
scalar @codons; # '300'