Perlで各文字処理のその後

 案1. $str = substr($str, 0, 1);でループを回す→遅すぎ(7万文字程度で大体21秒。)
 案2. メモリの事は気にせずsplit //, $strしてからループを回す→7万文字は一瞬で処理できたが、調子に乗って文字数を増やすとなんかOSごと固まった(もう怖いので試したくない)
 というわけで、2つの案を試してみたが、遅かったり、そもそもなんか動かなくなったりした。
 substrでのアクセス自体はそこまで遅くないみたいなので、毎回substrでi文字目までたどるコストの事は無視して、substr($str, $i, 1)で処理していくのが簡単っぽい。無駄にオーダーが上がるのが気持ち悪いけど、ここは妥協して次に進むべきだな。