http://qs321.pair.com?node_id=1026167


in reply to regex pattern match

Since Text::ParseWords is a core it should not be a problem to use it.

Here is my attempt:

#!/usr/bin/perl use strict; use warnings; use Text::ParseWords; while ( my $line = <DATA> ) { chomp $line; my @fields = quotewords( ',', 0, $line ); my @lastfield; if ( index( $fields[-1], ',') > -1 ) { @lastfield = quotewords(',',0,$fields[-1]); $fields[-1] = shift @lastfield; } @fields = map { '"'.$_.'"' } @fields; # if quotes are obligatory print join( ',', @fields ), "\n"; while ( my $rest = shift @lastfield ) { $rest = '"'.$rest.'"'; my @temp = (' ') x scalar @fields - 1; # three spaces, # two of these because of quotes push @temp, $rest; print join(' ', @temp ), "\n"; } } __DATA__ "A","B","C","D" "A","B","C","D,E,F" "A","B","C","D" "A","B","C","D,R,T"

The output:

"A","B","C","D" "A","B","C","D" "E" "F" "A","B","C","D" "A","B","C","D" "R" "T"