santosh_vjit has asked for the wisdom of the Perl Monks concerning the following question:

This node falls below the community's threshold of quality. You may see it by logging in.

Replies are listed 'Best First'.
Re: String split problem
by almut (Canon) on Apr 06, 2010 at 15:05 UTC

    You haven't specified how the double [Aussie] section is supposed to be handled...  but in case this was just a typo, you could use Config::INI::Reader

    use Config::INI::Reader; my $str =" [India] Captain1 = Dhoni Batsman1 = Sachin Bowler1 = Zaheer [Aussie] Captain = Ponting Batsman = Clarke Bowler = Warne [Aussie] Captain = Hussey Batsman = Waugh Bowler = Mcgrath"; my $hash = Config::INI::Reader->read_string($str); use Data::Dumper; print Dumper $hash; __END__ $VAR1 = { 'India' => { 'Captain1' => 'Dhoni', 'Bowler1' => 'Zaheer', 'Batsman1' => 'Sachin' }, 'Aussie' => { 'Bowler' => 'Mcgrath', 'Captain' => 'Hussey', 'Batsman' => 'Waugh' } };

    Another similar module would be Config::Any::INI, but I think the latter can only take input from file:

    use Config::Any::INI; my $hash = Config::Any::INI->load('my.ini');
Re: String split problem
by ww (Archbishop) on Apr 06, 2010 at 14:22 UTC
Re: String split problem
by ZlR (Chaplain) on Apr 06, 2010 at 14:42 UTC
    Here's how i do that :
    my $str =" [India] Captain1 = Dhoni Batsman1 = Sachin Bowler1 = Zaheer [Aussie] Captain = Ponting Batsman = Clarke Bowler = Warne [Aussie] Captain = Hussey Batsman = Waugh Bowler = Mcgrath"; my @l = split "\n", $str ; my $key ; my %rez ; for my $it (@l) { next if $it =~ m /^$/ ; if ($it =~ m/^\[(.*)\]/) { $key = $1 } else { my @t = split "=", $it ; $rez{$key}{ $t[0] } = $t[1] } } use Data::Dumper ; print Dumper \%rez ;
    It's really basic and straightforward but a least you immediately know what's going on.

    edit : did not see that the aussie section was duped, you could always if define $rez{$key} etc ...