in reply to Sort based on a delimited field in array elements without affecting original array elements

My solution uses the Schwartizan Transform, a good technique to get familiar with when you're doing more complicated sorting...

First, you want to use map to turn each element of the array into an arrayref that contains the split-up line. Then, you sort based on the 1st (not 0th) element of the arrayref, which is the first field of your line. Then, you use another map to return the array element back to normal. Voila:

#!/usr/bin/perl -w use strict; use Data::Dumper; chomp( my @array = <DATA> ); @array = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, split /!/ ] } @array; print Dumper \@array; __DATA__ 100!100!key!date!2.. 100!100!key!store! 110!110!P\d\d\d_.*\.\d{6,}\.EMRemr 120!125! 1!yeada 130!132! 140!133! 150!134! 500!blah 160!135!arbor_ama 503!blah 170!136! 505!blah 180!137! 190!138!

"We're experiencing some Godzilla-related turbulence..."

  • Comment on Re: Sort based on a delimited field in array elements without affecting original array elements
  • Download Code