#!/usr/bin/perl -w use strict; use warnings; # program identifies if the number series contains > 2500 continuous numbers # read this number series into a arr1 # if (length < 2500) # then ,discrad # else { # for (i=1 to $len) # idenitfy the indices where there are breaks and # store these indices into arr2 # foreach element in this @arr2 # if the difference in the indices > 2500 # then take the diff and print the range use Data::Dumper; my @files = ; foreach my $file (@files){ my $file = $ARGV[0]; open INFILE," $file" or die "$!\n"; ; ; my @arr1 = ; close INFILE; my $len = scalar(@arr1) ; print "$len\n" ; my (@range, %h, @numbers); if ($len < 2500) { print "no use of searching\n" ; } else { my $last_line = $#arr1; my ($range_start, $range_end) = ('', ''); for (my $i = $last_line; $i > 0; $i--) { my $line = $arr1[$i]; if ($line =~ /t:\s*(\d+)/) { push(@numbers, $1); } } } if (scalar @numbers){ for (my $i = 0; $i< scalar(@numbers); $i++){ last if ($i+1 > $#numbers); my $f = $numbers[$i]; my $s = $numbers[$i+1]; if ($f - $s == 1) { $h{s} = $f if (!$h{s}); $h{e} = $s; }else{ push(@range, [[$h{e}, $h{s}]]); $h{s} = 0; $h{e} = 0; # can be updated to any number to get all the ranges # for now gives only two ranges last if (scalar @range == 2); } } } # in case its only one range if ($h{s} && $h{e} && !scalar(@range)) { push (@range, [$h{e}, $h{s}]); } print Dumper \@range; }