in reply to Struggling with complex data structures and doing useful operations on their elements and populating from arrays

The issue is to split into fields but keep those grouped by parantheses together. For comma-separated data it is always advisable to use a module like Text::CSV rather that splitting yourself. Text::CSV cannot directly treat parantheses but if you replace them with double quotes it should work fine.

UPDATE: here is some sample code:

use strict; use warnings; use Text::CSV; my %pets; my @info; $info[0]="Mary,Owens,cat,white"; $info[1]="Bill,Thompson,(cat,dog),(white,black)"; $info[2]="Bill,Thompson,(hamster,cat),(black,brown)"; $info[3]="Bill,Smith,(goldfish,dog,turtle),(yellow,spotted,green)"; s/[()]/"/g for @info; my $csv = Text::CSV->new(); for (@info) { $csv->parse( $_ ); print join ":", map { "\"$_\"" } $csv->fields(); print "\n"; }
  • Comment on Re: Struggling with complex data structures and doing useful operations on their elements and populating from arrays
  • Download Code

Replies are listed 'Best First'.
Re^2: Struggling with complex data structures and doing useful operations on their elements and populating from arrays
by marinersk (Priest) on Mar 12, 2015 at 14:24 UTC

    If you're considering the module approach, I would also check out Text::CSV_XS. I have heard it has more flexibility in a lot of places like delimiters and such, is possibly more reliable, and allegedy much faster.

      Thank you for your reply, I am hoping for a non-module assist as I am trying to figure out the subtleties of multidimensional hashes of multiple scalars and arrays. In the literature that I have the examples are hashes of arrays or hashes ... I have not grasped this fully yet.

        I figured you were not looking for a module solution, that's why I started stepping you through the process.

        So let's go back to my example above where I loop through your @info array. Is there anything in that example you do not understand?