This is a great tutorial. Special the code with Data::Dumper.
This makes clear how map and sort interact.
Just a minor. The code will not run as displayed.
So I added a runnable example :
use Data::Dumper
## Build an array of anonymous arrays,
## each of which contains the sort field and the original element.
@anons = map{ [ substr( $_, 1 ) , $_ ] } qw[ A473 B659 C123 D222 E0
+01 ];;
my $dd=Data::Dumper->new([\@anons],[ qw(anons) ] )->Indent(2)->Quote
+keys(0)->Dump;
print $dd;
print '-' x 40 , "\n"; ## Now sort the anonymous arrays
## by comparing the extracted fields.
@sortedAnons = sort{ $a->[ 0 ] <=> $b->[ 0 ] } @anons;;
my $dd=Data::Dumper->new([\@sortedAnons],[ qw(sortedAnons) ] )->Inde
+nt(2)->Quotekeys(0)->Dump;
print $dd;
print '-' x 40 , "\n"; ## Finally, build the required sorted array
## by extracting the original elements discarding the sort fields.
@sorted = map{ $_->[ 1 ] } @sortedAnons;;
my $dd=Data::Dumper->new([\@sorted],[ qw(sorted) ] )->Indent(2)->Quo
+tekeys(0)->Dump;
print $dd;
print '-' x 40 , "\n";
The above code will show :
$anons = [
[
'473',
'A473'
],
[
'659',
'B659'
],
[
'123',
'C123'
],
[
'222',
'D222'
],
[
'001',
'E001'
]
];
----------------------------------------
$sortedAnons = [
[
'001',
'E001'
],
[
123,
'C123'
],
[
222,
'D222'
],
[
473,
'A473'
],
[
659,
'B659'
]
];
----------------------------------------
$sorted = [
'E001',
'C123',
'D222',
'A473',
'B659',
];
----------------------------------------
-
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.