File Coverage

blib/lib/Comparer/from_sortkey.pm
Criterion Covered Total %
statement 8 21 38.1
branch 0 10 0.0
condition n/a
subroutine 3 6 50.0
pod 0 2 0.0
total 11 39 28.2


line stmt bran cond sub pod time code
1             package Comparer::from_sortkey;
2              
3 1     1   374547 use 5.010001;
  1         5  
4 1     1   7 use strict 'subs', 'vars';
  1         2  
  1         85  
5 1     1   8 use warnings;
  1         2  
  1         461  
6              
7             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
8             our $DATE = '2024-01-24'; # DATE
9             our $DIST = 'Comparer-from_sortkey'; # DIST
10             our $VERSION = '0.001'; # VERSION
11              
12             sub meta {
13             return +{
14 0     0 0   v => 1,
15             args => {
16             sortkey => {schema=>'perl::sortkey::modname_with_optional_args*', req=>1},
17             reverse => {schema => 'bool*'},
18             ci => {schema => 'bool*'},
19             },
20             };
21             }
22              
23             sub gen_comparer {
24 0     0 0   my %args = @_;
25              
26 0 0         my $sortkey = $args{sortkey} or die "Please specify sortkey";
27 0           my $reverse = $args{reverse};
28 0           my $ci = $args{ci};
29              
30 0           require Module::Load::Util;
31              
32 0           my ($mod, $args) = Module::Load::Util::_normalize_module_with_optional_args($sortkey);
33 0           $mod = Module::Load::Util::_load_module({ns_prefix=>"SortKey"}, $mod);
34 0 0         my $is_num = $mod =~ /\ASortKey::Num::/ ? 1:0;
35 0           my $keygen = &{"$mod\::gen_keygen"}(@$args);
  0            
36              
37             sub {
38             (
39             $is_num ? ($keygen->($_[0]) <=> $keygen->($_[1])) :
40             $args{ci} ? (lc($keygen->($_[0])) cmp lc($keygen->($_[1]))) : ($keygen->($_[0]) cmp $keygen->($_[1]))
41 0 0   0     ) * ($args{reverse} ? -1 : 1)
    0          
    0          
42 0           };
43             }
44              
45             1;
46             # ABSTRACT: Compare keys generated by a SortKey:: module
47              
48             __END__