Listing 1. The Script #!/usr/bin/perl use CGI qw(:standard); my $infile = 'maintenance.txt'; my $mileage_range = "10000"; # Only show entries within this range if(param()) { $requestType = param("requestType"); $serviceId = param("serviceId"); $point = param("point"); $count = param("count"); $offset = param("offset"); $sort = param("sort"); $signature = param("signature"); $mileage = param("q"); my %hash; my $items = 0; parse_infile($infile, \%hash); foreach (sort keys %hash){ if(abs($_ - $mileage) < $mileage_range){ next if($hash{$_}{'c'} == 1); $delta = $_ - $mileage; if($delta >= 0){ $title = "$_ - $hash{$_}{'desc'}"; $desc = "<![CDATA[<html>In <b>$delta</b> ↪miles:<br>$hash{$_}{'desc'}</html>]]>"; } else { $title = "PAST DUE: $hash{$_}{'desc'}"; $desc = "<![CDATA[<html><font color=#FF0000> ↪<b>" . abs($delta) . "</b> miles <i>PAST DUE</i> ↪</font>:<br>$hash{$_}{'desc'}</html>]]>"; } $output .= output_result($title, $desc); $items++; } } print header('text/xml'); print '<?xml version="1.0" encoding="UTF-8"?>' . "\n<resultSet>" . "<serviceId>$serviceId</serviceId>" . "<count>$items</count>"; print $output; print '</resultSet>'; exit; } sub output_result { my $title = shift; my $desc = shift; my $output; $output = "\n<result>" . "<title>$title</title>" . "<description>$desc</description>" . '</result>'; return $output; } sub parse_infile { my $infile = shift; my $href = shift; my ($mileage, $desc, $completed); open INFILE, $infile or die "Can't open $infile: $!\n"; while(<INFILE>){ chomp; $mileage = $desc = $completed = ""; ($mileage, $desc, $completed) = split ',', $_; $$href{$mileage}{'desc'} = $desc; $$href{$mileage}{'c'} = $completed; } close INFILE; }