#!/usr/bin/perl use strict; use warnings; use Text::ParseWords; while ( my $line = ) { 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"