File Coverage

web/cgi-bin/yatt.lib/YATT/Util/CmdLine.pm
Criterion Covered Total %
statement 30 30 100.0
branch 17 18 94.4
condition 10 12 83.3
subroutine 5 5 100.0
pod 0 2 0.0
total 62 67 92.5


line stmt bran cond sub pod time code
1             package YATT::Util::CmdLine;
2 3     3   518 use strict;
  3         4  
  3         89  
3 3     3   9 use warnings FATAL => qw(all);
  3         3  
  3         122  
4              
5 3     3   9 BEGIN {require Exporter; *import = \&Exporter::import}
  3         826  
6              
7             our @EXPORT_OK = qw(parse_opts parse_params);
8             our @EXPORT = @EXPORT_OK;
9              
10             # posix style option.
11             sub parse_opts {
12 4     4 0 797 my ($pack, $list, $result) = @_;
13 4         3 my $wantarray = wantarray;
14 4 100       8 unless (defined $result) {
15 2 100       4 $result = $wantarray ? [] : {};
16             }
17 4   100     28 while (@$list
18             and my ($n, $v) = $list->[0] =~ /^--(?:([\w\.\-]+)(?:=(.*))?)?/) {
19 10         10 shift @$list;
20 10 100       14 last unless defined $n;
21 8 100       7 $v = 1 unless defined $v;
22 8 100       10 if (ref $result eq 'HASH') {
23 2         11 $result->{$n} = $v;
24             } else {
25 6         24 push @$result, $n, $v;
26             }
27             }
28 4 100 66     24 $wantarray && ref $result ne 'HASH' ? @$result : $result;
29             }
30              
31             # 'Make' style parameter.
32             sub parse_params {
33 3     3 0 314 my ($pack, $list, $hash) = @_;
34 3         3 my $explicit;
35 3 100       4 unless (defined $hash) {
36 2         3 $hash = {}
37             } else {
38 1         1 $explicit++;
39             }
40 3   66     15 for (; @$list and $list->[0] =~ /^([^=]+)=(.*)/; shift @$list) {
41 2         10 $hash->{$1} = $2;
42             }
43 3 100 100     9 if (not $explicit and wantarray) {
44             # return empty list if hash is empty
45 1 50       5 %$hash ? $hash : ();
46             } else {
47 2         7 $hash
48             }
49             }
50              
51             1;