#! perl -slw use strict; sub swab{ substr( $_[0], $_[1], 1 ) ^= substr( $_[0], $_[2], 1 ) ^= substr( $_[0], $_[1], 1 ) ^= substr( $_[0], $_[2], 1 ) } my $s ='AB'; swab( $s, 0, 1 ); print "'$s'"; my $t ='AB'; swab( $t, 0, 1 ); print "'$t'"; eval q[ sub swab{ substr( $_[0], $_[1], 1 ) ^= substr( $_[0], $_[2], 1 ) ^= substr( $_[0], $_[1], 1 ) ^= substr( $_[0], $_[2], 1 ) } ]; my $u = 'AB'; swab( $u, 0, 1 ); print "'$u'"; swab( $u, 0, 1 ); print "'$u'"; __END__ P:\test>junk 'BA' ' A' Subroutine swab redefined at (eval 1) line 2. 'BA' ' B' #### #! perl -slw use strict; sub swab1{ substr( $_[0], $_[1], 1 ) ^= substr( $_[0], $_[2], 1 ) ^= substr( $_[0], $_[1], 1 ) ^= substr( $_[0], $_[2], 1 ) } sub swab2{ substr( $_[0], $_[1], 1 ) ^= substr( $_[0], $_[2], 1 ) ^= substr( $_[0], $_[1], 1 ) ^= substr( $_[0], $_[2], 1 ) } my $s ='AB'; swab1( $s, 0, 1 ); print "'$s'"; swab2( $s, 0, 1 ); print "'$s'"; my $u = 'AB'; swab1( $u, 0, 1 ); print "'$u'"; swab2( $u, 0, 1 ); print "'$u'"; __END__ P:\test>junk 'BA' 'AB' ' A' ' '