вспомнился скрипт "неправильная раскладка", там был двумерный массив символов для одной и другой раскдаки и конвертируемая строка перебиралась посимвольно. а получается что все это можно заменить на
%a =~ t/qwertyuiop[]asdfghjkl;'zxcvbnm,./йцукенгшщзхъфывапролджэячсмитьбю/
%a =~ t/QWERTYUIOP{}ASDFGHJKL;'ZXCVBNM,./ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ/
в одну сторону, и
%a =~ t/йцукенгшщзхъфывапролджэячсмитьбю/qwertyuiop[]asdfghjkl;'zxcvbnm,./
%a =~ t/ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ/QWERTYUIOP{}ASDFGHJKL;'ZXCVBNM,./
вдругую сторону.
удобно.