Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

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

by tobyink (Abbot)
on May 26, 2017 at 14:48 UTC ( #1191294=note: print w/replies, xml ) Need Help??


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

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;

Replies are listed 'Best First'.
Re^4: Sorting files by 3 numbers in the name
by LanX (Bishop) on May 26, 2017 at 15:27 UTC
    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://1191294]
help
Chatterbox?
[LanX]: values %{ $DBI->fetchrow_has href('column_name' }
[LanX]: ehm ... fetchall_hashref
[Jenda]: my int @a = ^5_000_000 Coerces the argument to Numeric, and generates a range from 0 up to (but excluding) the argument.
[Jenda]: The apparent design principle of Perl6 operators was "Let's confuse 'em dudes." Whose braindead idea was this particular operator and the three hundred around it?

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (9)
As of 2018-07-16 16:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?















    Results (344 votes). Check out past polls.

    Notices?