use strict; use warnings; my $inData1 = <; close $ur_ci; my %matches; open my $ci_ur, "<", \$inData2; while (<$ci_ur>) { chomp; my ($ci, $ur) = split; $matches{$ci} = $ur if exists $urCi{$ur} && $urCi{$ur} eq $ci; } print "$_ => $matches{$_}\n" for sort keys %matches; #### F_00034 => G_00162 F_00035 => G_00163 F_00036 => G_00164 #### use strict; use warnings; use DBI; my $inData1 = <connect ("dbi:SQLite:dbname=db.SQLite","",""); $dbh->do ('CREATE TABLE urci (ci TEXT, ur TEXT)'); $dbh->do ('CREATE TABLE ciur (ur TEXT, ci TEXT)'); my $sth = $dbh->prepare ('INSERT INTO urci (ur, ci) VALUES (?, ?)'); open my $ur_ci, "<", \$inData1; $sth->execute (do {chomp; split}) while <$ur_ci>; close $ur_ci; $sth = $dbh->prepare ('INSERT INTO ciur (ci, ur) VALUES (?, ?)'); open my $ci_ur, "<", \$inData2; $sth->execute (do {chomp; split}) while <$ci_ur>; close $ci_ur; $sth = $dbh->prepare ( 'SELECT * FROM ciur INNER JOIN urci ON ciur.ci = urci.ci AND ciur.ur = urci.ur' ); $sth->execute (); print "$_->{ci} => $_->{ur}\n" while $_ = $sth->fetchrow_hashref (); #### F_00034 => G_00162 F_00035 => G_00163 F_00036 => G_00164