use strict; ## simulate stock data from above script my %stock; $stock{'128'} = [0,224,0,0]; $stock{'12'} = [0,0,15,0]; $stock{'8'} = [32,0,0,0]; while () { ## file2 my @data = split(',',$_); if (exists $stock{$data[0]}) { my $ary_ref = $stock{$data[0]}; my ($sm,$md,$lg,$xl) = @$ary_ref; $data[9] = $sm unless ($sm); $data[12] = $md unless ($md); $data[15] = $lg unless ($lg); $data[18] = $xl unless ($xl); } print "@data\n"; } # I've assumed you want the 'price' element (??) left alone unless 'qty' is zero # in which case set it to zero. __DATA__ 128,1,Download,0,,TEXT,2,Size,2,??,SM,3,??,MD,4,??,LG,5,??,XL 12,1,Download,0,,TEXT,2,Size,2,??,SM,3,??,MD,4,??,LG,5,??,XL 8,1,Download,0,,TEXT,2,Size,2,??,SM,3,??,MD,4,??,LG,5,??,XL