Я хочу транслитерировать цифры от 1 до 8 с 0, но не знаю числа во время компиляции. Поскольку транслитерация не интерполирует переменные, я делаю это:
@trs = (sub{die},sub{${$_[0]} =~ tr/[0,1]/[1,0]/},sub{${$_[0]} =~ tr/[0,2]/[2,0]/},sub{${$_[0]} =~ tr/[0,3]/[3,0]/},sub{${$_[0]} =~ tr/[0,4]/[4,0]/},sub{${$_[0]} =~ tr/[0,5]/[5,0]/},sub{${$_[0]} =~ tr/[0,6]/[6,0]/},sub{${$_[0]} =~ tr/[0,7]/[7,0]/},sub{${$_[0]} =~ tr/[0,8]/[8,0]/});
а затем индексировать его как:
$trs[$character_to_transliterate](\$var_to_change);
Я был бы признателен, если бы кто-нибудь мог указать мне на лучшее решение.
tr/[0,1]/[1,0]/
можно (должно) записать какtr/01/10/
- person mob   schedule 10.03.2011[,]
ничего не добавляют к выражению (и могут сделать его менее эффективным). Это эквивалентно, скажем,tr/],[01/],[10/
. Они могут ввести в заблуждение начинающего Perl-программиста, столкнувшегося с вашим кодом, что они как-то связаны с синтаксисомtr
. - person mob   schedule 10.03.2011[0,1]
это может работать правильно, но это вводит в заблуждение. Прочтите второй комментарий моба и конвертера. - person Cascabel   schedule 10.03.2011