正規表現は基本的に遅いよ。
他のやり方でやろうとすると数行並べなきゃならなくなるような
処理なら素直に正規表現使った方が速くなることもあるけど。

use Benchmark;
timethese(500000,{
1=>q{
$hoge = '123456789';
$hoge =~ s/^(..).*/$1/;
},
2=>q{
$hoge = '123456789';
$hoge = substr($hoge,0,2);
}
});
Benchmark: timing 500000 iterations of 1, 2...
1: 20 wallclock secs (20.69 usr + 0.00 sys = 20.69 CPU) @ 24167.43/s (n=500000)
2: 3 wallclock secs ( 3.55 usr + 0.00 sys = 3.55 CPU) @ 141003.95/s (n=500000)