my @ef = (extract_multiple($param_string, [ sub { extract_delimited($_[0]) }, sub { extract_bracketed($_[0]) }, sub { extract_variable($_[0]) }, ], undef,0)); my ($extracted, @fields, $field, @subfields); foreach $extracted (@ef) { if ($extracted ne ",") { if ($extracted =~ /^["'`\[\(\$\@\%]/ ) { push(@fields, $extracted); } else { # If this is not the first field, remove any leading # spaces and a comma. If it was the very first field, # then the first comma is significant. if (@fields) { ($extracted) = ($extracted =~ /\s*,?(.*)/); } @subfields = split(/,/, $extracted); # Split on comma foreach $field (@subfields) { ($field) = ($field =~ /([^\s]+)/); # Keep non-space push(@fields, $field); } } } }