File Coverage

blib/lib/Docopt/Util.pm
Criterion Covered Total %
statement 62 66 93.9
branch 18 22 81.8
condition 6 11 54.5
subroutine 19 20 95.0
pod 0 11 0.0
total 105 130 80.7


line stmt bran cond sub pod time code
1             package Docopt::Util;
2 4     4   21 use strict;
  4         6  
  4         132  
3 4     4   27 use warnings;
  4         9  
  4         92  
4 4     4   1048 use utf8;
  4         17  
  4         28  
5 4     4   3481 use parent qw(Exporter);
  4         1253  
  4         20  
6 4     4   2956 use boolean;
  4         11734  
  4         21  
7              
8             our @EXPORT_OK = qw(repl class_name string_strip string_partition in True False is_number defined_or serialize pyprint);
9              
10 331     331 0 827 sub True() { true }
11 212     212 0 648 sub False() { false }
12              
13 4     4   3985 use Data::Dumper; # serializer
  4         23454  
  4         317  
14 4     4   27 use Scalar::Util ();
  4         8  
  4         52  
15 4     4   4554 use Storable ();
  4         16240  
  4         109  
16 4     4   32 use B;
  4         8  
  4         3283  
17              
18             sub pyprint {
19 0     0 0 0     print Docopt::Util::repl($_[0]), $/;
20             }
21              
22             sub serialize($) {
23 8652     8652 0 162612     local $Storable::canonical=1;
24 8652         19845     return Storable::nfreeze($_[0]);
25             }
26              
27             sub is_number {
28 449     449 0 687     my $value = shift;
29 449         2088     my $b_obj = B::svref_2object(\$value);
30 449         1165     my $flags = $b_obj->FLAGS;
31 449 100 66     1767     return 1 # as is
32                             if $flags & ( B::SVp_IOK | B::SVp_NOK ) and !( $flags & B::SVp_POK ); # SvTYPE is IV or NV?
33 329         1525     return 0;
34             # return 0 if ref $stuff;
35             # return 0 unless defined $stuff;
36             # return 1 if $stuff =~ /\A[0-9]+\z/;
37             # return 0;
38             }
39              
40             sub in {
41 6482     6482 0 44489     my ($val, $patterns) = @_;
42 6482         10086     for (@$patterns) {
43 13531 100       20132         if (defined $_) {
44 11807 100       25107             return 0 if not defined $val;
45 11703 100       37001             return 1 if $val eq $_;
46                     } else {
47 1724 100       4267             return 1 if not defined $val;
48                     }
49                 }
50 3422         9908     return 0;
51             }
52              
53             sub repl($) {
54 293     293 0 3883     my ($val) = @_;
55 293 100 66     2105     if (Scalar::Util::blessed($val) && $val->can('__repl__')) {
    50 50        
    50          
56 112         296         $val->__repl__;
57                 } elsif ((Scalar::Util::blessed($val)||'') eq 'boolean') {
58 0 0       0         $val ? 'True' : 'False';
59                 } elsif (ref($val) eq 'ARRAY') {
60 0         0         return '[' . join(', ', map { &repl($_) } @$val) . ']';
  0         0  
61                 } else {
62 181         234         local $Data::Dumper::Terse=1;
63 181         211         local $Data::Dumper::Indent=0;
64 181         189         local $Data::Dumper::Useqq=1;
65 181         438         Dumper($val)
66                 }
67             }
68              
69             sub class_name {
70 115   33 115 0 324     my $name = ref $_[0] || $_[0];
71 115         341     $name =~ s/^Docopt:://;
72 115         313     $name;
73             }
74              
75             sub string_strip($) {
76 257     257 0 411     local $_ = shift;
77 257         503     s/^\s+//;
78 257         543     s/\s+$//;
79 257         561     $_;
80             }
81              
82             sub string_partition($$) {
83 790     790 0 1154     my ($str, $sep) = @_;
84 790 100       11834     if ($str =~ /\A(.*?)$sep(.*)\z/s) {
85 530         3169         return ($1, $sep, $2);
86                 } else {
87 260         995         return ($str, '', '');
88                 }
89             }
90              
91 1868 100   1868 0 13635 sub defined_or { defined($_[0]) ? $_[0] : $_[1] }
92              
93             1;
94              
95