CPAN::Distroprefs -- read and match distroprefs
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;
}
}
}
This module encapsulates reading Distroprefs and matching them against CPAN distributions.
my $finder = CPAN::Distroprefs->find($dir, \%ext_map);
while (my $result = $finder->next) { ... }
Build an iterator which finds distroprefs files in the given directory.
%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:
a CPAN::Distroprefs::Result object
undef
, indicating that no prefs files remain to be found
find()
returns CPAN::Distroprefs::Result objects to indicate success or failure when reading a prefs file.
All results share some common attributes:
success
, warning
, or fatal
the file from which these prefs were read, or to which this error refers (relative filename)
the file's extension, which determines how to load it
the directory the file was read from
the absolute path to the file
Error results (warning and fatal) contain:
the error message (usually either $!
or a YAML error)
Success results contain:
an arrayref of CPAN::Distroprefs::Pref objects
CPAN::Distroprefs::Pref objects represent individual distroprefs documents. They are constructed automatically as part of success
results from find()
.
the pref information as a hashref, suitable for e.g. passing to Kwalify
returns a list of the valid match attributes (see the Distroprefs section in CPAN)
currently: env perl perlconfig distribution module
true if this pref has a 'match' attribute at all
true if this pref has a 'match' attribute and at least one valid match attribute
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)
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.