my @fields = qw(Year A2 Month A2 Day A2 Request_Seq A4 Request_Type A2 Record_Seq A2 Record_Data A1486); my @keys = map $fields[$_], grep $_%2==0, 0 .. $#fields; my @values = map $fields[$_], grep $_%2==1, 0 .. $#fields; my %data; # bad name. we should know better. ;) @data{ @keys } = unpack join("", @values), $foo;