summaryrefslogtreecommitdiffstats
path: root/GC.pl
blob: b25fdb61b7af5421fed8a21952be3fc0e370643b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env perl
use strict;
use warnings;
use 5.016;

sub calculate_gc {
    my ($dna) = @_;
    return(($dna =~ tr/GC/GC/) / length($dna));
}

my ($max_name, $max_gc);
sub process_string {
    my ($name, $dna) = @_;
    if ($max_name) {
        my $gc = calculate_gc($dna);
        if ($gc > $max_gc) {
            $max_name = $name;
            $max_gc   = $gc;
        }
    }
    else {
        $max_name = $name;
        $max_gc   = calculate_gc($dna);
    }
}

{
    my ($name, $dna);
    while (<>) {
        chomp;
        if (/^>(.*)/) {
            process_string($name, $dna) if $name;
            $name = $1;
            $dna = '';
        }
        else {
            $dna .= $_;
        }
    }
    process_string($name, $dna);
}

say $max_name;
say $max_gc * 100 . '%';