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"; } }