I would suggest adding some print Dumper statements in to make sure that you have the kind of thing that you think that you have...
Running some simple test should provide some light on what data this pkoutFile sub is really getting. I simplified your statement to input the sub's input args - avoid using indicies unless you have to - Perl is designed so they aren't needed nearly as often as in other languages.
pkoutFile($OUTFP, ';:=~',"301","WPSPD", $valDate1, "SPREAD",
my( $outFH, $delims, $branchID, $sourceSystem,
$valDateY4MD, $rateType, $rowsHdl, $colNamesHdl)= @_;
print Dumper \$rowsHdl;
#$colNamesHdl is undefined in this case
#so, it appears that this following code is executed
$k = $$rowsHdl; # $rowsHdl->
print Dumper \$k;
@ff = keys(%$k);
print Dumper \@ff;
update: I noticed that for example the k1 value has a calculation done on it, but is never printed. With further looking, if the intent of the regex you want is to remove leading and trailing spaces, I would suggest this:
foreach ($delims, $branchID, $valDateY4MD,
s/^\s+//; #remove leading spaces
s/\s+$//; #remove trailing spaces
This sets $_ to each of the scalar variables in turn and then runs 2 simple and fast regex'es that do not require the /g switch. In this case $_ is an alias for the variable (like $delims) and changes in the loop are reflected in changes to the actual variable.