use strict;
use warnings;
my $wholeBallOfWax = do {local $/; <DATA>};
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
Prints:
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
where the only substantive change from my suggested earlier code was to replace hyphen with tilda and replace internal newlines with spaces.
Update: or Per Hippo's suggestion:
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 $/; <DATA>};
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
Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond
|