in reply to checking the matches
Efficently?Not sure ;)
my %h = map{ reverse /(\d+).*#(.+)/ } grep "@array1", @array2; print Dumper \%h; [download]
Output: $VAR1 = { 'def' => '890', 'abc' => '15', 'ghi' => '78' }; [download]
hth,PooLpi