in reply to Sort by -M

#!/usr/bin/perl # http://perlmonks.org/?node_id=1208341 use strict; use warnings; use Data::Dump 'pp'; my @tmparray = (<d.tree*>, 'nosuchfile'); # for testing purposes... pp \@tmparray; # replace # @tmparray = sort { -M "$b" <=> -M "$a" } (@tmparray); # with @tmparray = map $_->[0], sort { $b->[1] <=> $a->[1] } grep defined $_->[1], map [ $_, -M $_ ], @tmparray; # end replace pp \@tmparray;

Replies are listed 'Best First'.
Re^2: Sort by -M
by roperl (Beadle) on Feb 02, 2018 at 20:33 UTC
    That looks like it'll work.
    Can you explain it. I'm not familiar with map
      map is a special "short-hand" for a "foreach loop".
      All map statements can be expressed as a "foreach loop".
      Consider:
      #!/usr/bin/perl use strict; use warnings; my @array = (1,2,3); @array = map {$_+1}@array; print "@array\n"; #prints: 2 3 4 foreach my $num (@array) { $num++; } print "@array\n"; #prints: 3 4 5
      Update: As an additional comment, sometimes I see a comment like "I didn't want to use a loop, so I used map". That is wrong. Map is a looping instruction whether it looks that way in the source code or not. A map vs a foreach loop winds up being basically the same in terms of how the input array is processed. I've seen 1/2 page map statements which in my opinion is an abuse of the feature. I use map for simple one line transformation operations. Mileage and situations vary.