sub parseNextElement { my ($input_line, @extra_stuff) = @_; if (!defined $input_line) { $input_line = ''; } if (!defined $extra_stuff[0]) { @extra_stuff = (); } # Initialize return elements my $next_element = ''; my $remaining_line = ''; # Check if first element is parentheses-encapsulated if ($input_line =~ /^\s*\(/) { # First element looks like it has parenthetically-encapsulated sub-elements ($next_element, $remaining_line) = split /\)/, $input_line, 2; # This chops off the closing parenthesis from that first element, so put it back $next_element .= ')'; # It also leaves the comma on the remaining line, so remove it # WARNING: Making lots of assumptions here about proper formatting $remaining_line =~ s/^\s*\,//; } else { # First element is a solitary value ($next_element, $remaining_line) = split /\,/, $input_line, 2; } return ($next_element, $remaining_line); }