Rather than using transliteration you could employ look-ups and a GRT sort.
use strict;
use warnings;
use feature qw{ say };
my $intended = <<'EOF';
.,-;:!?"'`_#$%&*+/|=@\^~()<>[]{}0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmN
+nOoPpQqRrSsTtUuVvWwXxYyZz
EOF
chomp $intended;
my $seq = 0;
my %sortLU = map { $_ => sprintf q{%02d}, $seq ++ } split m{}, $intend
+ed;
my %revLU = reverse %sortLU;
my @list = qw{
"Hello"
Abel
(hello)
{adieu}
@adieu
[goodbye]
Charlie
^Charlie
~Adieu
zebra
21708
baker
.
-
;
:
!
?
"
'
`
_
};
push @list, q{ first};
say for
map { join q{}, map { $revLU{ $_ } } unpack q{(a2)*}, $_ }
sort
map { join q{}, map { $sortLU{ $_ } } split m{}, $_ }
@list;
The output
first
.
-
;
:
!
?
"
"Hello"
'
`
_
@adieu
^Charlie
~Adieu
(hello)
[goodbye]
{adieu}
21708
Abel
baker
Charlie
zebra
I hope this is useful.
Update: I mistakenly omitted the space character from the start of the sort order string. Now corrected with an additional item " first" to check that spaces are sorted correctly.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|