Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^2: Sorting files by 3 numbers in the name

by LanX (Archbishop)
on May 26, 2017 at 14:21 UTC ( #1191288=note: print w/replies, xml ) Need Help??


in reply to Re: Sorting files by 3 numbers in the name
in thread Sorting files by 3 numbers in the name

FWIW it's certainly faster your way, but personally I'd rather go for named matches, for the sake of readability.

See %+ in perlretut#Named-backreferences . :)

Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Je suis Charlie!

  • Comment on Re^2: Sorting files by 3 numbers in the name

Replies are listed 'Best First'.
Re^3: Sorting files by 3 numbers in the name
by tobyink (Abbot) on May 26, 2017 at 14:48 UTC

    Yeah, but I think they were added in 5.10, and when possible I try to give examples using 5.8 features. (Something like say is excusable, because it's so easy to write a shim for it.

    sub say { local $\ = "\n"; print(@_ or $_) } sub IO::Handle::say { my $h = shift; local $\ = "\n"; $h->print(@_ or +$_) }

    I also quite like this way:

    use constant { IX_FILENAME => 0, IX_RUN => 2, IX_DISTRICT => 8, IX_COPY => 9, IX_TOTAL => 10, }; print Dumper map { Dumper($_), $_->[IX_FILENAME] } sort { $a->[IX_RUN] <=> $b->[IX_RUN] or $a->[IX_DISTRICT] <=> $b->[IX_DISTRICT] or $a->[IX_COPY] <=> $b->[IX_COPY] or $a->[IX_TOTAL] <=> $b->[IX_TOTAL] } map { [ $_, split /_/ ] } @files;
      agreed, with split it's a plus! =)

      I wonder about the best idiomatic way ( with or w/o List::Util ) to shorten the or chain such that we don't need to repeat the field names.

      use strict; use warnings; use Data::Dump; use List::Util qw/first/; $\="\n"; # --- init my @fields = qw( RUN DISTRICT COPY TOTAL ); my %a = map { $_ => 1- int rand 3 } @fields; my %b = map { $_ => 1- int rand 3 } @fields; dd \@fields,\%a,\%b; # --- w/o List::Util my $last; my $field; for (@fields) { $field =$_; $last = $a{$_} <=> $b{$_} and last; } print "$field,$last"; # --- with List::Util print first { $last = $a{$_} <=> $b{$_} } @fields; print $last;

      ( ["RUN", "DISTRICT", "COPY", "TOTAL"], { COPY => -1, DISTRICT => 1, RUN => 1, TOTAL => -1 }, { COPY => -1, DISTRICT => 1, RUN => 1, TOTAL => 0 }, ) TOTAL,-1 TOTAL -1

      Cheers Rolf
      (addicted to the Perl Programming Language and ☆☆☆☆ :)
      Je suis Charlie!

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1191288]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (7)
As of 2018-11-19 18:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My code is most likely broken because:
















    Results (217 votes). Check out past polls.

    Notices?