use strict; use Data::Dumper; my $con = qr/[b-df-hj-np-tv-xz]/; my $vow = qr/[aeiouy]/; my $ncon = qr/[^b-df-hj-np-tv-xz]/; my $nvow = qr/[^aeiouy]/; my $x = 'battlestar galactica'; my $y = 'silly ahab'; ($x,$y) = map{swap($_)}($x,$y); print Dumper([$x,$y]); sub swap { my $x = shift; if($x =~ /(${con})(${ncon}*?\b)(${ncon}*?)(${con})/){ $x = $`.$4.$2.$3.$1.$'; } $x }