use warnings; use strict; use Tie::File; tie my @file1, 'Tie::File', '/tmp/file1.txt' or die $!; tie my @file2, 'Tie::File', '/tmp/file2.txt' or die $!; for (@file1) { my ($name,$lo1,$hi1) = split /[\s\-]+/; for (@file2) { my ($lo2,$hi2) = split /-/; # your comparison logic here print "name=$name, lo1=$lo1, hi1=$hi1; lo2=$lo2, hi2=$hi2\n"; } } #### name=a, lo1=11, hi1=23; lo2=33, hi2=39 name=a, lo1=11, hi1=23; lo2=40, hi2=42 name=a, lo1=11, hi1=23; lo2=43, hi2=46 name=a, lo1=11, hi1=23; lo2=51, hi2=52 name=b, lo1=33, hi1=39; lo2=33, hi2=39 name=b, lo1=33, hi1=39; lo2=40, hi2=42 name=b, lo1=33, hi1=39; lo2=43, hi2=46 name=b, lo1=33, hi1=39; lo2=51, hi2=52 name=c, lo1=40, hi1=45; lo2=33, hi2=39 name=c, lo1=40, hi1=45; lo2=40, hi2=42 name=c, lo1=40, hi1=45; lo2=43, hi2=46 name=c, lo1=40, hi1=45; lo2=51, hi2=52 name=d, lo1=48, hi1=58; lo2=33, hi2=39 name=d, lo1=48, hi1=58; lo2=40, hi2=42 name=d, lo1=48, hi1=58; lo2=43, hi2=46 name=d, lo1=48, hi1=58; lo2=51, hi2=52