# untested, as usual :-) and without the "replace" functionality sub midstr { return substr(shift, shift, shift); } sub leftstr { return substr(shift, 0, shift); } sub rightstr { return substr(shift, -shift); }