in reply to Faster method needed?

If I'm reading your code right:
$self->{S_KEY} will be a string.
$shift is how many characters to rotate
If $shift is odd throw away first character
$self->{S_KEY} = substr($self->{S_KEY},1);
To the end of the str is default
If $shift is even throw away last character
Just use chop.
Then shift the first $shift chars to the back
The for loop calaculation is wasteful in that you do that calculation on every loop. (Unless the compiler optimizes it, but you're thinking C in construct) You could of done foreach my $i (0..($shift %length($self->{S_KEY})))
I'm a bit () happy.
Or better yet don't use a loop.
$shift = ($shift % length($self->{S_KEY}) $self->{S_KEY} = substr($self->{S_KEY}, $shift).substr($self->{S_KEY}, + 0, $shift);

And as MeowChow points out, what's with the bad prototyping? I forgot I stripped that out of hand. use strict and turn on warnings