Допустим, у меня есть строка длины, кратная 3.
my $seq = "CTTCGAATT"; # in this case length of 9
Есть ли способ, которым я могу разделить его на равную длину 3? Такой, что в итоге у меня есть этот массив:
$VAR = ["CTT", "CGA", "ATT"];
Взгляните на решение в Как я могу разбить строку на куски по два символа в Perl?
Особенно unpack может быть интересным:
unpack
my @codons = unpack("(A3)*", $seq);
Выполните итерации по кратным трем, используя substr, чтобы получить кусочки push в списке.
substr
push
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'
my $str='ABCDEFGHIJKLM';
мы можем использовать совпадение строк, чтобы получить части из строки, где минимальная длина равна 1, а максимальная - требуемая длина, 3 или 4 или что-то еще
@parts = $str =~ /(.{1,4})/g;и мы получаем @parts = ['ABCD', 'EFGH', 'IJKL', 'M']
@parts = $str =~ /(.{1,4})/g;
@parts = ['ABCD', 'EFGH', 'IJKL', 'M']