sub popstr { substr $_[0], -1, 1, '' } # or chop sub shiftstr { substr $_[0], 0, 1, '' } sub pushstr { length($_[0] .= join '', @_[1..$#_]) } sub unshiftstr { length($_[0] = join('', @_[1..$#_]) . $_[0]) } my $string = 'testing'; my $foo = shiftstr $string; # esting my $bar = popstr $string; # estin pushstr $string, $foo; # estint unshiftstr $string, $bar; # gestint print "$string\n";