As stated in the original post, it was not my intention to suggest that this code was the only or best way to accomplish what I was trying to do. I could obviously have passed an array of array references or any number of other things rather than an array of letters. I posted it only because I thought it might be helpful to others to note the subtle "gotcha" between defining variables with "my" and with "local" when using a construct such as $$ctm.
As you noted, using $a and $b was an unfortunate choice in the snippet example but those names were chosen for brevity in the example, not as a model of good code.