use strict; use warnings; my $wholeBallOfWax = do {local $/; }; my @records = split /\s*(?<=\n)(?=\d+~)/, $wholeBallOfWax; s/\n+/ /gs for @records; s/\s+\z//gs for @records; print join "\n", @records; __DATA__ 99~Arun~Kumar~Mobilenum: 1234-567 , from Earth Human 98~Mahesh~Babu~Mobilenum: 5678-901 , from Earth Human 97~Grand~Father~Mobilenum: 2734-567 , from Mars Ape #### 99~Arun~Kumar~Mobilenum: 1234-567 , from Earth Human 98~Mahesh~Babu~Mobilenum: 5678-901 , from Earth Human 97~Grand~Father~Mobilenum: 2734-567 , from Mars Ape #### use strict; use warnings; use Test::More tests => 1; my @want = ( '99~Arun~Kumar~Mobilenum: 1234-567 , from Earth Human', '98~Mahesh~Babu~Mobilenum: 5678-901 , from Earth Human', '97~Grand~Father~Mobilenum: 2734-567 , from Mars Ape' ); my $wholeBallOfWax = do {local $/; }; my @records = split /\s*(?<=\n)(?=\d+~)/, $wholeBallOfWax; s/\n+/ /gs for @records; s/\s+\z//gs for @records; is_deeply (\@records, \@want); __DATA__ 99~Arun~Kumar~Mobilenum: 1234-567 , from Earth Human 98~Mahesh~Babu~Mobilenum: 5678-901 , from Earth Human 97~Grand~Father~Mobilenum: 2734-567 , from Mars Ape