sub Msg { my $line = shift; my ($pf,$fixFields) = split(/received:|Sent:/, $line); %fixMsg; %fixMsg = split(/[,=]/, $fixFields); @fixMsg{('_time_', '_mi_', '_fixsession_')} = (split(/\|/, $pf))[2,3,5]; return \%fixMsg; } open file,"abc.txt" while() { $msg=pfUtils::Msg($_); foreach my $key (%{$msg}) { if (!($key eq _mi_|$key eq _fixsession_|$key eq _time_|$msg->{$key} eq '')) { printf "\n\t%20s (%3d) = %s ", $code,$key,$value; } } } close file;