Eric Walker wrote: > Hey all, > I have a file with some data that has like nested parens.. example > > yes( "hello" "goodbye" > > ( (one 2) (two 3) (three 4) > ) > (( mon 1) (tues 2) (wed 3) > ) > ((jan 1) (feb 2) (march 3) > ) > ) > > I need help in trying to break this up and make key value pairs out of > the data example: > KEY VALUE > one 2 > two 3 > three 4 > mon 1 > tues 2 > wed 3 > jan 1 > feb 2 > march 3 >
there are many ways of doing that, here is one: #!/usr/bin/perl -w use strict; (my $parens=<<PARENS) =~ s/\n//g; (one 2) (two 3) (three 4) ) ((mon 1) (tues 2) (wed 3) ) ((jan 1) (feb 2) (march 3) ) PARENS my %hash = map split, $parens =~ /\(+([^()]+)\)+/g; while(my($name,$value) = each %hash){ print "$name,$value\n"; } __END__ prints: feb,2 jan,1 three,4 march,3 one,2 mon,1 wed,3 tues,2 two,3 depends on the actual data you have, you might need to modify the above slightly to suit your case. another way of doing it is to remove the parens and replace multiple spaces with one and then split on a single space to get the name value pair you want but this approach is slightly less efficient than the proposed one. it's, however, a bit easier to code. david -- s,.*,<<,e,y,\n,,d,y,.s,10,,s .ss.s.s...s.s....ss.....s.ss s.sssss.sssss...s...s..s.... ...s.ss..s.sss..ss.s....ss.s s.sssss.s.ssss..ss.s....ss.s ..s..sss.sssss.ss.sss..ssss. ..sss....s.s....ss.s....ss.s ,....{4},"|?{*=}_'y!'+0!$&;" ,ge,y,!#:$_(-*[./<[EMAIL PROTECTED],b-t, .y...,$~=q~=?,;^_#+?{~,,$~=~ y.!-&*-/:[EMAIL PROTECTED] ().;s,;, );,g,s,s,$~s,g,y,y,%,,g,eval -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>