#!/usr/bin/perl -w use strict; while( my $data = ) { chomp($data); next unless $data; my $fields = get_fields( $data ); $fields->[rand(3)]->[0] = 'newval'; my $str = remap_fields( $fields ); print "$str\n"; } sub get_fields { [ map{ s/^"|"$//g ? [ $_, 1 ] : [ $_, 0 ] } split /(?<=\S),(?=\S)/, $_[0] ]; } sub remap_fields { join ',', map{ $_->[1] ? qq!"$_->[0]"! : $_->[0] } @{$_[0]}; } __DATA__ "hi",3,20.6,"green","32" 16,"alpha",0.00