File Coverage

lib/File/Util/Interface/Classic.pm
Criterion Covered Total %
statement 30 47 63.8
branch 6 16 37.5
condition 4 8 50.0
subroutine 10 11 90.9
pod n/a
total 50 82 60.9


line stmt bran cond sub pod time code
1 21     21   61 use strict;
  21         24  
  21         459  
2 21     21   63 use warnings;
  21         23  
  21         826  
3              
4             package File::Util::Interface::Classic;
5             $File::Util::Interface::Classic::VERSION = '4.161950';
6             # ABSTRACT: Legacy call interface to File::Util
7              
8 21     21   62 use Scalar::Util qw( blessed );
  21         27  
  21         1773  
9              
10 21     21   75 use lib 'lib';
  21         23  
  21         2137  
11              
12 21     21   2133 use File::Util::Definitions qw( :all );
  21         17  
  21         3855  
13              
14 21         1824 use vars qw(
15             @ISA $AUTHORITY
16             @EXPORT_OK %EXPORT_TAGS
17 21     21   74 );
  21         655  
18              
19 21     21   69 use Exporter;
  21         19  
  21         7253  
20              
21             $AUTHORITY = 'cpan:TOMMY';
22             @ISA = qw( Exporter );
23             @EXPORT_OK = qw(
24             _myargs
25             _remove_opts
26             _names_values
27             );
28              
29             %EXPORT_TAGS = ( all => [ @EXPORT_OK ] );
30              
31              
32             # --------------------------------------------------------
33             # File::Util::Interface::Classic::_myargs()
34             # --------------------------------------------------------
35             sub _myargs {
36              
37 786 100 66 786   2822 shift @_ if ( blessed $_[0] || ( $_[0] && $_[0] =~ /^File::Util/ ) );
      66        
38              
39 786 100       1463 return wantarray ? @_ : $_[0]
40             }
41              
42              
43             # --------------------------------------------------------
44             # File::Util::Interface::Classic::_remove_opts()
45             # --------------------------------------------------------
46             sub _remove_opts {
47              
48 0     0   0 shift; # we don't need "$this" here
49              
50 0         0 my $args = shift @_;
51              
52 0 0       0 return unless ref $args eq 'ARRAY';
53              
54 0         0 my @triage = @$args; @$args = ();
  0         0  
55 0         0 my $opts = { };
56              
57 0         0 while ( @triage ) {
58              
59 0         0 my $arg = shift @triage;
60              
61             # if an argument is '', 0, or undef, it's obviously not an --option ...
62 0 0 0     0 push @$args, $arg and next unless $arg; # ...so give it back to the @$args
63              
64             # hmmm. looks like an "--option" argument, if:
65 0 0       0 if ( $arg =~ /^--/ ) {
66              
67             # it's either a bare "--option", or it's an "--option=value" pair
68 0         0 my ( $opt, $value ) = split /=/, $arg;
69              
70             # bare version
71 0 0       0 $opts->{ $opt } = defined $value ? $value : 1;
72             # ^^^^^^^ if $value is undef, it was a --flag (true)
73              
74             # sanitized version, remove leading "--" ...
75 0         0 my $clean_name = substr $opt, 2;
76              
77             # ...and replace non-alnum chars with "_" so the names can be
78             # referenced as hash keys without superfluous quoting and escaping
79 0         0 $clean_name =~ s/[^[:alnum:]]/_/g;
80              
81 0 0       0 $opts->{ $clean_name } = defined $value ? $value : 1;
82             }
83             else {
84              
85             # but if it's not an "--option" type arg, give it back to the @$args
86 0         0 push @$args, $arg;
87             }
88             }
89              
90 0         0 return $opts;
91             }
92              
93              
94             # --------------------------------------------------------
95             # File::Util::Interface::Classic::_names_values()
96             # --------------------------------------------------------
97             sub _names_values {
98              
99 171     171   174 shift; # we don't need "$this" here
100              
101 171         217 my @in_pairs = @_;
102 171         149 my $out_pairs = { };
103              
104             # this code no longer tries to catch foolishness such as names that are
105             # undef other than skipping over them, for lack of sane options to deal
106             # with such insane input ;-)
107 171         769 while ( my ( $name, $val ) = splice @in_pairs, 0, 2 ) {
108              
109 144 100       209 next unless defined $name;
110              
111 142         419 $out_pairs->{ $name } = $val;
112             }
113              
114 171         516 return $out_pairs;
115             }
116              
117              
118             # --------------------------------------------------------
119             # File::Util::Interface::Classic::DESTROY()
120             # --------------------------------------------------------
121       2     sub DESTROY { }
122              
123             1;
124              
125              
126             __END__