CPAN::Distroprefs#

read and match distroprefs

SYNOPSIS#

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;
        }
    }
}

DESCRIPTION#

This module encapsulates reading Distroprefs and matching them against CPAN distributions.

INTERFACE#

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:

  • a CPAN::Distroprefs::Result object

  • undef, indicating that no prefs files remain to be found

RESULTS#

find() returns CPAN::Distroprefs::Result objects to indicate success or failure when reading a prefs file.

Common#

All results share some common attributes:

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#

the absolute path to the file

Errors#

Error results (warning and fatal) contain:

msg#

the error message (usually either $! or a YAML error)

Successes#

Success results contain:

prefs#

an arrayref of CPAN::Distroprefs::Pref objects

PREFS#

CPAN::Distroprefs::Pref objects represent individual distroprefs documents. They are constructed automatically as part of success results from find().

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)

LICENSE#

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.