I have a college student that works for me and I was trying to help him with his perl project but I couldn't figure out what was going on with it. He's got a txt file of numbers in rows. The numbers have to be sorted on a per row basis and then determine how many triples, pair, or straights ( 3 consecutive numbers) there are on each row. We get the values to show up correctly but at the bottom of the page it doesn't like our ==, !=, or - operators. I was hoping someone might be able to help me understand this a little better so I might be able to explain it to him.
#!/usr/bin/perl
#use strict;
use warnings;
#use diagnostics;
#open file and set file handler
$infile_name = "input.txt";
open(INFILE, $infile_name) or die "Error opening file $!";
#$line = $_;
chomp(@lines = <INFILE>);
#close File handler
close(INFILE) or die "Error - unable to close file $!";
############################################
#Validate sample size
if($lines[0] >= 1 && $lines[0] <= 200000)
{
$sample_size = $lines[0];
}
else
{
print "\nInvalid Sample Size!\n";
}
print "\nSample size = ".$sample_size; #print sample size
#############################################
#print original sample
print "\nHere is the original sample: \n";
foreach $line (@lines)
{
print "$line";
}
#############################################
#print sorted sample and output whether
#individual is vulnerable or immune to infection
print "\n\nNow sorted: \n";
$susceptibility = "";
$infected = 0;
foreach $line(@lines)
{
@snums = split(' ', $line);
@nums = sort { $a <=> $b } @snums;
$size = @nums;
$pairs = 0;
$straights = 0;
$triples = 0;
#if not equal to 14 characters output vulnerable
if($size == 1)
{
$susceptibility = "";
}
elsif($size != 14 && $size != 1)
{
$susceptibility = "Immune";
print "@nums"."\t".$susceptibility."\n";
}
elsif($size == 14)
{
$i = 0;
#check for gene combinations
#while($i <= $#nums)
for ($i =0; $i < 14;)
{
#Check for triples
if(($nums[$i] == $nums[$i+1]) && ($nums[$i] == $nums[$i+2]
))
{
$triples ++;
$i += 3;
}
#Check for pairs
elsif(($nums[$i] == $nums[$i+1]) && ($nums[$i] != $nums[$i+2])
&& ($nums[$i] != $nums[$i-1]))
{
$pairs ++;
$i += 2;
}
#Check for straights
elsif(($nums[$i] == ($nums[($i+1)]-1)) && ($nums[$i+1] ==
($nums[($i+2)]-1)))
{
$straights ++;
$i +=3;
}
else
{
$i += 1;
}
}
$susceptibility = "Vulnerable";
$infected ++;
print "@nums"."\t".$susceptibility."\t"." Triples: $triples". " Pairs: $pairs"." Straights: $straights"."\n";
}
}
#############################################
#Print outro
print "\nGene Analysis complete. $infected vulnerable cases found - Eliminate Immediately!\n\n";
#############################################
input.txt file
6
1 3 4 7 9 1 3 4 7 9 1 3 4 7
2 6 2 6 3 5 4 6 2 9 7 8 7 7
9 9 9 6 5 4 3 7 3 8 3 2 2 1
5 5 5 4 3 1 3 2 9 6 9 7 9 8
1 3 2 4 4 7 7 4 5 6 8 9 3
9 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
We've been compiling this at www.compileonline.com using the PERL option.