use CPAN::Distroprefs; my %info = (... distribution/environment info ...); my $finder = CPAN::Distroprefs->find($prefs_dir, \%ext_map); while (my $result = $finder->next) { die $result->as_string if $result->is_fatal; warn($result->as_string), next if $result->is_warning; for my $pref (@{ $result->prefs }) { if ($pref->matches(\%info)) { return $pref; } } }
my $finder = CPAN::Distroprefs->find($dir, \%ext_map); while (my $result = $finder->next) { ... }
Build an iterator which finds distroprefs files in the tree below the given directory. Within the tree directories matching "m/^[._]/" are pruned.
%ext_map is a hashref whose keys are file extensions and whose values are modules used to load matching files:
{ 'yml' => 'YAML::Syck', 'dd' => 'Data::Dumper', ... }
Each time "$finder->next" is called, the iterator returns one of two possible values:
type
"success", "warning", or "fatal"
file
the file from which these prefs were read, or to which this error refers (relative filename)
ext
the file's extension, which determines how to load it
dir
the directory the file was read from
abs
msg
the error message (usually either $! or a YAML error)
prefs
an arrayref of CPAN::Distroprefs::Pref objects
data
the pref information as a hashref, suitable for e.g. passing to Kwalify
match_attributes
returns a list of the valid match attributes (see the Distroprefs section in CPAN)
currently: "env perl perlconfig distribution module"
has_any_match
true if this pref has a 'match' attribute at all
has_valid_subkeys
true if this pref has a 'match' attribute and at least one valid match attribute
matches
if ($pref->matches(\%arg)) { ... }
true if this pref matches the passed-in hashref, which must have a value for each of the "match_attributes" (above)