The Computer Language
Benchmarks Game

k-nucleotide Perl #4 program

source code

# The Computer Language Benchmarks Game
#  http://benchmarksgame.alioth.debian.org/
#
#  contributed by Mykola Zubach

use strict;
use integer;
use threads;

my($sequence, $seq_len, $thr, @threads, %h);

sub count_frame {
   my $len = shift;
   for (0 .. $seq_len - $len) {
      $h{substr($sequence, $_, $len)} ++;
   }
}

sub count_len {
   my $len = shift;
   my $out;
   count_frame($len);

   no integer;
   if(@_) {
      $out = join '', map sprintf("%d\t%s\n", $h{$_}, $_), @_;
   } else {
      my $sum = $seq_len - $len + 1;
      for (sort { $h{$b} <=> $h{$a} || $a cmp $b } keys %h) {
         $out .= sprintf "%s %.3f\n", $_, $h{$_} * 100 / $sum;
      }
      $out .= "\n";
   }
   return $out;
}

## MAIN()

while(<STDIN>) {
   last if /^>THREE /;
}
while(<STDIN>) {
   last if /^>/;
   chomp;
   $sequence .= uc;
}
$seq_len = length($sequence);

for (1,2) {
   push @threads, threads->create(\&count_len, $_);
}

for (qw(GGT GGTA GGTATT GGTATTTTAATT GGTATTTTAATTTATAGT)) {
   push @threads, threads->create(\&count_len, length, $_);
}

foreach $thr (@threads) {
   print $thr->join();
}
    

notes, command-line, and program output

NOTES:
32-bit Ubuntu one core
This is perl 5, version 24, subversion 0 (v5.24.0) built for i686-linux


Tue, 10 May 2016 19:04:37 GMT

COMMAND LINE:
/usr/local/src/perl-5.24.0_no_ithreads_no_multi/bin/perl knucleotide.perl-4.perl 0 < knucleotide-input250000.txt

PROGRAM FAILED 


PROGRAM OUTPUT:

This Perl not built to support threads
Compilation failed in require at knucleotide.perl-4.perl line 8.
BEGIN failed--compilation aborted at knucleotide.perl-4.perl line 8.