#!/usr/bin/env perl use strict; use warnings; if (scalar(@ARGV) != 2) { print "Usage: perl $0 \n"; exit -1; } my %range; open my $fh_range, q{<}, $ARGV[0] or die $!; while (<$fh_range>) { my @range_data = split; push @{$range{$range_data[0]}}, [@range_data[1,2]]; } close $fh_range; open my $fh_code, q{<}, $ARGV[1] or die $!; while (<$fh_code>) { check_range([split]); } close $fh_code; sub check_range { my ($key, $num, $dat) = @{+shift}; if (! exists $range{$key}) { print qq{Key [$key] not found.\n}; return; } for my $range_ref (@{$range{$key}}) { my ($min, $max) = @$range_ref; if ($num >= $min && $num <= $max) { print qq{Key[$key]-Num[$num]-Dat[$dat]}, qq{ in range Min[$min]-Max[$max]\n}; return; } } print qq{Key[$key]-Num[$num]-Dat[$dat] out of bounds.\n}; return; } #### $ pm_range_code.pl pm_range.txt pm_code.txt Key[T2]-Num[34]-Dat[lit] in range Min[23]-Max[43] Key [T3] not found. Key[Tn]-Num[100]-Dat[net2] in range Min[66]-Max[124] Key [Tk] not found. Key[T2]-Num[100]-Dat[dummy] out of bounds.