#!/usr/bin/perl use strict; use warnings; # "use warnings" tends to be preferred over "-w" # Seed can be longer than 3 digits but always 0,1,2,3 my $seed = $ARGV[0] || "000"; if ($seed =~ /[^0-3]/) { # "If $seed contains anything other than 0,1,2,3" die "Invalid seed. Seed may only contain digits from 0 through 3.\n"; } # First loop is to generate 1 position differ for my $i (0..length($seed) - 1) { for my $first_diff (0..3) { next if (substr($seed, $i, 1) == $first_diff); my $outer_variant = $seed; substr($outer_variant, $i, 1) = $first_diff; print "$outer_variant"; # Second loop for tags in 2 positions differ for my $j ($i+1..length($seed) - 1) { for my $second_diff (0..3) { next if (substr($outer_variant, $j, 1) == $second_diff); my $inner_variant = $outer_variant; substr($inner_variant, $j, 1) = $second_diff; print "\t$inner_variant"; } } print "\n"; } }