Step 1: get all your stock data into a hash as suggested by poj
use strict;
use Data::Dumper;
my %stock;
while (<DATA>) {
my ($qty,$model,$size) = split(',',$_);
$stock{$model} = [0,0,0,0] unless (exists $stock{$model});
$stock{$model}[0] = $qty if ($size =~ /sm/i);
$stock{$model}[1] = $qty if ($size =~ /md/i);
$stock{$model}[2] = $qty if ($size =~ /lg/i);
$stock{$model}[3] = $qty if ($size =~ /xl/i);
}
print Dumper(\%stock);
__DATA__
224,128,MD,B,840197082997
0,128,LG,B,840197083000
0,128,XL,B,840197083017
0,12,SM,B,840197082997
15,12,LG,B,840197083000
0,12,XL,B,840197083017
32,8,SM,B,840197082997
Step 2: Update file2 data
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 (<DATA>) { ## 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 'qt
+y' 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