##
@hash{ map{ join q{ }, $fname[$_], $lname[$_] } 0 .. $#fname } = @state;
####
use List::MoreUtils qw( zip pairwise );
# ...
%hash = zip @{[ pairwise { join q( ), $a, $b } @fname, @lname ]}, @state;
####
@hash{@names} = @states;