# Create a set list from the data and the data map sub makemap { my($map, $r) = @_; my($key, $result, $t, %h, $ndx); %h=%$r; $result=""; foreach $key (sort(keys(%$map))) { #print "$key:\t$map->{$key}\n"; $t = $map->{$key}; # substitute the actual value for the placeholder fieldname $t =~ s/(\{\S+\})/defined(eval("\$h$1")) ? eval("\$h$1") : "NULL"/eg; # replace any double quotes with escaped doubles if ((substr($t,0,1) eq '"') && (length($t) > 2)) { # best 196 sec # $ndx = 1; # while( ($ndx = index($t, '"', $ndx)) != -1 and ++$ndx < length($t)) { # substr($t, $ndx++, 0, '"'); # } # original 198 sec # for ($ndx=1; $ndx < length($t)-1; $ndx++) { # if (substr($t,$ndx,1) eq '"') { # substr($t,$ndx,1) = '""'; # $ndx++; # } # } # substring 204 sec # substr($t, 1, -1) =~ s/"/""/g; # zero width assertion 201 sec $t =~ s/(?<=.)"(?=.)/""/g; } #print "$t\n"; $result .= qq($key=$t ,); } chop($result); # remove trailing , return($result); }