Sure. Essentially, this is just a s/// operator. I've used angle brackets instead of slashes as the delimiter.
$str =~ s<
( # Start capturing (to $1)
\s* # Optional whitespace (forgot this before)
\" # starting with a quote
[^\"]+ # 1 more of anything except a quote
\" # another quote
\s* # optional white space
) # end capture
(,|$) # capture comma seperator (or EOL*)
>
< # /e option makes this becomes a code block
# put the contents of $1 into a localised writable var
#($1 is read only!)
# and use the tr/// op to remove the commas
(local $a = $1) =~ tr/,//d;
# The last expression in the block is used as the
# replacement expression, so we put the decomma'd localise
+d var here.
# not forgetting to put back the final comma
# If it was there*
$a .$2 ;
>gex; #!" Global, Execute, ignore whitespace in regex
The weird comment (#!") I forgot to remove, is just used to keep the syntax parser in my editor happy. Sorry for any confusion it caused.
Update* Added to correct error spotted by LAI. Use Text::CSV instead.
Examine what is said, not who speaks.
The 7th Rule of perl club is -- pearl clubs are easily damaged. Use a diamond club instead. |