5 use Scalar
::Util
'reftype';
12 use Data
::Dump
'dump';
15 eval 'use version_input;' unless $INC{''.__PACKAGE__
};
19 # $filename is in the same directory as this package
20 my $package_file = __PACKAGE__
.'.pm';
22 ($filename = $INC{$package_file}) =~ s/$package_file/version-input.yml/;
28 open my $file, '<', $filename;
32 %test = %{YAML
::XS
::LoadFile
$filename};
35 # load add => {key=>'default'}, map=>{}, filter=>[]
38 my($add,$filter,$map,$all);
41 while( my $next = shift ){
43 when( 'add' ){ $add = shift }
44 when( 'map' ){ $map = shift }
45 when( 'filter' ){ $filter = shift }
46 when( 'all' ){ $all = 1; last }
51 for my $version(keys %test){
52 my %details = %{$test{$version}};
56 $return{$version} = {%details};
58 my $current = $return{$version} = {};
59 $details{version
} = $version;
62 for my $add (@
$filter){
64 if('+' eq substr $add, 0, 1){
65 $add = substr $add, 1;
66 $current->{$add} = $details{$add}
68 $current->{$add} = $details{$add} if exists $details{$add};
73 for my $id( keys %$map ){
74 my $ref = $map->{$id};
76 given( reftype
$ref ){
77 when(undef){ $current->{$id} = $details{$ref} }
80 my $_ = $details{$id};
89 $current->{$id} = $return;
98 return %return if wantarray;