Maybe I don't get your problem fully, but the behaviour of your
code seems sensible to me.
Personally I try to avoid shift whenever I can (usually by assigning
paramters vi my ($v1,$v2) = @_;
So try
my $Rubbish=join "",(split //,$_[0])[$_[1]..$_[2]];