use strict; use Data::Dumper; my @rec; while (){ chomp; my %rec; $rec{$1}=$2 while /([^:]*):([^%]*)%{0,1}/xg; push @rec,{%rec}; } print Dumper \@rec; print $rec[0]->{SMTP}, "\n"; print $rec[1]->{SMTP}, "\n";