#!/usr/bin/perl -w
use strict;
use warnings;
# program identifies if the number series contains > 2500 continuo
+us 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 = </Users/distance/8A/*>;
foreach my $file (@files){
my $file = $ARGV[0];
open INFILE," $file" or die "$!\n";
<INFILE>;
<INFILE>;
my @arr1 = <INFILE>;
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;
}
i get an error as= Use of uninitialized value $file in concatenation (.) or string at test.pl line 31 |