in reply to Feedback Appreciated on text-parsing, SQL querying subroutine

You are basically just manually doing a SQL JOIN in the code -- you can simplify this by letting the database (in this case i see it's postgres) do the work:
... # open file; connect to $dbh my $sth = $dbh->prepare(qq{ SELECT d1.d_id as did1, d2.d_id as did2, d1.c_id as cid1, d2.c_id as cid2 FROM d as d1, d as d2 WHERE d1.d_id = ? AND d2.d_id = ? AND d1.c_id != d2.c_id }); while(<INPUT>){ my( $did1, $did2, $score1, $score2 ) = split "\t", $_; next unless $score1 >=70 && $score2 >=60; $sth->execute($did1,$did2); while( my $row = $sth->fetchrow_arrayref ){ print join(', ', @$row), "\n"; } } close INPUT;