There are quite a few issues with your script, if you put these two lines at the top you will get an idea:
use strict;
use warnings;
See
The strictures, according to Seuss for why.
To fix the most obvious try this (untested):
my %map = ();
while (<IN>) {
chomp $_;
my @items = split(/\,/, $_);
$map{$items[0]} = $items[1]; # [1] not [2]
}
close IN;
my ($cur_awb,$cur_val);
while (<BASE>) {
chomp $_;
if ($_ =~ m/\<KEY_BOL_REF\>(\d*)\<\/KEY_BOL_REF\>/) {
$cur_awb = $1;
$cur_val = $map{$cur_awb}; # should do some error check here
print OUT $_ . "\n";
}
# ... etc.
}