> > That sounds only "slightly" different. Please examine the code that I have > provided and modify it for your own, specific needs. >
U are right, I think I'm really close to the solution of my problem.. I tried to put all the lesson togheter and I got this script that do what i want: #!/usr/bin/perl use strict; use warnings; my @G1 = (["alfa" , "10"], ["beta" , "11"]); my @L1 = (["alfa" , "10"], ["gamma" , "12"]); my @G2 =('gamma','teta'); my %unique; for my $e1 ( @G1 ) { $unique{$e1->[0]} = $e1->[1]; } my %overlap; for my $e2 ( @L1 ) { my( $key, $val ) = @$e2; if( exists $unique{$key} ) { $overlap{$key} = 1; delete $unique{$key}; }else{ $unique{$key} = $val; } } for my $e3 ( @G2 ) { delete $unique{$e3}; } for my $key ( keys %unique ) { print "Unique: ", "[ $key, $unique{$key} ]\n"; } This script do what I need but still miss the dbi part. So i tried to put the stuff again with this script: ###################################################### #!/usr/bin/perl -w use strict; use warnings; use DBI; use DBD::mysql; use warnings; my $db_gal = DBI->connect( "dbi:mysql:test_gal:localhost:3306","user","password" ) or die( $DBI::errstr . "\n" ); my $SEL_G1 = "select * from GAL"; my $query_handle_gal = $db_gal->prepare($SEL_G1); $query_handle_gal->execute(); my $tbl_ary_ref_g1 = $query_handle_gal->fetchall_arrayref(); ######################################### my $db_lab = DBI->connect( "dbi:mysql:test_lab:localhost:3306","user","password" ) or die( $DBI::errstr . "\n" ); my $SEL_L1 = "select * from LAB"; my $query_handle_lab = $db_lab->prepare($SEL_L1); $query_handle_lab->execute(); my $tbl_ary_ref_l1 = $query_handle_lab->fetchall_arrayref(); ########################################## my $db_gal2 = DBI->connect( "dbi:mysql:test_gal:localhost:3306","user","password" ) or die( $DBI::errstr . "\n" ); my $SEL_G2 = "select * from GAL2"; my $query_handle_gal2 = $db_gal2->prepare($SEL_G2); $query_handle_gal2->execute(); my $tbl_ary_ref_g2 = $query_handle_gal2->fetchall_arrayref(); ######################################### #my @G1 = (["alfa" , "10"], ["beta" , "11"]); #my @L1 = (["alfa" , "10"], ["gamma" , "12"]); #my @G2 =('gamma','teta'); # populate a hash with the elements of G1 my %unique; for my $e1 ( @$tbl_ary_ref_g1 ) { $unique{$e1->[0]} = $e1->[1]; } # add elements in L1 not in G1 # delete elements in both my %overlap; for my $e2 ( @$tbl_ary_ref_l1 ) { my( $key, $val ) = @$e2; if( exists $unique{$key} ) { $overlap{$key} = 1; delete $unique{$key}; }else{ $unique{$key} = $val; } } for my $e3 ( @$tbl_ary_ref_g2 ) { delete $unique{$e3}; } for my $key ( keys %unique ) { print "Unique: ", "[ $key, $unique{$key} ]\n"; The 3 queries give these results from the cli: 1) mysql> select * from GAL; +------+------+ | col1 | col2 | +------+------+ | alfa | 10 | | beta | 11 | +------+------+ 2) mysql> select * from LAB; +-------+------+ | col1 | col2 | +-------+------+ | gamma | 12 | | alfa | 10 | +-------+------+ 3) mysql> select * from GALILEO2; +-------+ | col1 | +-------+ | gamma | +-------+ Now the script don't do what i was expecting couse it gives me: Unique: [ gamma, 12 ] Unique: [ beta, 11 ] Where i was looking for: Unique: [ beta, 11 ] Sure i'm really bad at programmer, bbut really i think im not so far from the results needed.... Tnx again everybody for the patient, really! Vito