use strict ; use warnings ; my(%h, %h2, $f, $master, $newmaster, %db) ; while( <$f> ) { @h{@KEYS} = split ; $db{$h{KEYFIELD} = { %h } ; } while( <$master> ) { @h2{@KEYS} = split ; @h2{@OTHERKEYS} = @$db{$h2{KEYFIELD}}{@OTHERKEYS} if exists $db{$h2{KEYFIELD}} ; print $newmaster join ":", @h2{@ALLKEYS} ; } # move new master ontop of oldmaster