When i change the code from $cnf{$c}=$_; to push @{$cnf{$c} }, $_; It doesn't work. #### #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @fields=split /\n/, <<'.END'; "INVITE sip:paka@36.212.176.92 SIP/2.0 To:samir Via: SIP/2.0/udp 36.212.176.90:5060;branch=z9hG4bk_Vn Via: SIP/2.0/udp 36.212.176.66:5060;branch=z9hG4bk_oo From: sanjay Call-ID: _Vn8TZTk2H@36.212.176.90 CSeq: 215 INVITE Max-Forwards: 70 Contact: sanjay"; .END my %config = ( URI => { regex => qr/^INVITE\ssip:/}, To => { regex => '^To:'}, From => { regex => '^From:'}, Via => { regex => '^Via:'}, Call_ID => { regex => '^Call-ID:'}, CSeq => { regex => '^CSeq:'}, MaxForwards => { regex => '^Max-Forwards:'}, Contact => { regex => '^Contact:'}, ); my %cnf; foreach (@fields) { foreach my $c (keys %config) { if (/$config{$c}{regex}/) { push @{ $cnf{$c} }, $_; } } } print Dumper $cnf{Via}; __END__