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',
];
----------------------------------------