#!/usr/bin/perl -slw sub mysubstr : lvalue { print "mysubstr(@_)"; print "Returning value '",substr($_[0],$_[1],$_[2]),"' as lvalue."; substr($_[0],$_[1],$_[2]); } sub swab{ my $s = "swab$ARGV[0]"; goto &$s; } sub swab1{ substr( $_[0], $_[1], 1 ) ^= substr( $_[0], $_[2], 1 ) ^= substr( $_[0], $_[1], 1 ) ^= substr( $_[0], $_[2], 1 ); } sub swab2{ mysubstr( $_[0], $_[1], 1, "1" ) ^= mysubstr( $_[0], $_[2], 1, "2" ) ^= mysubstr( $_[0], $_[1], 1, "3" ) ^= mysubstr( $_[0], $_[2], 1, "4" ); } sub swab3{ my($c1,$c2); print " Char $_[2]: ",$c2 = substr($_[0],$_[2],1); print " Char $_[1]: ",$c1 = substr($_[0],$_[1],1); print " 1 ^ 2: ",$c1 = $c1 ^ $c2; print " 2 ^ 1 ^ 2: ",$c2 = $c2 ^ $c1; print "1 ^ 2 ^ 2 ^ 2: ",$c1 = $c1 ^ $c2; substr($_[0],$_[1],1)=$c1; substr($_[0],$_[2],1)=$c2; } my $t; $t ='AB'; swab( $t, 0, 1 ); print "'$t'"; print "'$t'"; print "length: ",length($t); $t ='AB'; swab( $t, 0, 1 ); print "'$t'"; print "'$t'"; print "length: ",length($t);