in reply to Sort list by position of items in another list

my $pchr = "KQRBNP"; my $w1 = "QRKPNBNBQRK"; my $ascii = join '', map chr $_, 0..length($pchr); my $w2 = join '', sort split //, eval "\$w1 =~ y/\Q$pchr\E/\Q$ascii\E/ +r"; eval "\$w2 =~ y/\Q$ascii\E/\Q$pchr\E/"; print "$w1 --[$pchr]--> $w2\n"
Or...
sub mk_sort { my $pchr = shift; my $a = join '', map chr, 0..length(\$pchr); eval qq{sub { (join '', sort split //, (shift =~ y/\Q$pchr\E/\Q$a\ +E/r)) =~ y/\Q$a\E/\Q$pchr\E/r }}; } my $sort = mk_sort "KQRBNP"; my $w1 = "QRKPNBNBQRK"; my $w2 = $sort->($w1); print "$w1 --> $w2\n"