$S = 'o'; for (1..16) { $S .= 'p'; # S -> Sp @processing = ($S); $S =~ s/op/i/; # op -> i $S =~ s/ip/c/; # ip -> c push @processing, $S; while ($S =~ /c/) { $S =~ s/oc/io/; # oc -> io $S =~ s/ic/co/; # ic -> co $S =~ s/^c/io/; # cS -> ioS push @processing, $S; } @out = map { sprintf ("%6s", $_) } @processing; printf ("%-44s == %6s\n", join (" ->", @out), $S); }