I'll say right off that I've no hints as to what's causing your variables to get muched up. But though you havn't said all that much about your real data, but it seems like you're trying to make this much more complicated than it needs to be. For example, using a regex with lookahead in list context would seem to be the way to go when solving your example problem:
my @vars = $string =~ /\d(?=\w\d)/g;
Is there any particular reason why you need to do it using the japhy's twistiness? Any reason why you can't just get all \ds and pop the last one off, either?
perl -pe '"I lo*`+$^X$\"$]!$/"=~m%(.*)%s;$_=$1;y^`+*^e v^#$&V"+@( NO CARRIER'