6 use Scalar
::Util
'reftype';
10 This file reads the c
<version
-input
.yml
> file that resides
in the
11 same directory
, and filters the data
for test files
.
19 use Data
::Dump
'dump';
22 eval 'use version_input;' unless $INC{''.__PACKAGE__
};
26 # $filename is in the same directory as this package
27 my $package_file = __PACKAGE__
.'.pm';
29 ($filename = $INC{$package_file}) =~ s/$package_file/version-input.yml/;
35 open my $file, '<', $filename;
39 %test = %{YAML
::XS
::LoadFile
$filename};
42 # load add => {key=>'default'}, map=>{}, filter=>[]
45 #my($add,$filter,$map,$all);
46 my( @filter, %map, $all );
49 while( my $next = shift ){
53 my @keys = keys %$hashref;
54 @map{@keys} = @
$hashref{@keys};
56 when( 'filter' ){ push @filter, @
{shift @_} }
57 when( 'all' ){ $all = 1; last }
62 for my $version(keys %test){
63 my %details = %{$test{$version}};
67 $return{$version} = {%details};
69 my $current = $return{$version} = {};
70 $details{version
} = $version;
74 # any element listed here will be added to the output
75 for my $add (@filter){
76 if('+' eq substr $add, 0, 1){
78 $add = substr $add, 1;
79 $current->{$add} = $details{$add}
81 $current->{$add} = $details{$add} if exists $details{$add};
86 for my $id( keys %map ){
89 given( reftype
$ref ){
90 when(undef){ $current->{$id} = $details{$ref} }
93 my $_ = $details{$id};
102 $current->{$id} = $return;
111 return %return if wantarray;