Dependency policy keeps a project clear about which modules are required and which are optional.

dependency-policy Classifying dependencies helps installation and maintenance decisions stay predictable.

Dependency Policy

module
dependency_policy.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

my $module = "JSON::PP";
my %required = (
    "JSON::PP" => 1,
    "DBI"      => 0,
    "Path::Tiny" => 0,
);
my $role = $required{$module} ? "required" : "optional";
my $install_group = $required{$module} ? "runtime" : "feature";

print "module=$module\n";
print "role=$role\n";
print "install_group=$install_group\n";
use strict;
use warnings;

my $module = "DBI";
my %required = (
    "JSON::PP" => 1,
    "DBI"      => 0,
    "Path::Tiny" => 0,
);
my $role = $required{$module} ? "required" : "optional";
my $install_group = $required{$module} ? "runtime" : "feature";

print "module=$module\n";
print "role=$role\n";
print "install_group=$install_group\n";
use strict;
use warnings;

my $module = "Path::Tiny";
my %required = (
    "JSON::PP" => 1,
    "DBI"      => 0,
    "Path::Tiny" => 0,
);
my $role = $required{$module} ? "required" : "optional";
my $install_group = $required{$module} ? "runtime" : "feature";

print "module=$module\n";
print "role=$role\n";
print "install_group=$install_group\n";
  1. $module ← JSON::PP, %required ← 3, $role ← required, $install_group ← runtime

    4my $module→ JSON::PP = "JSON::PP"; #@module="DBI", "Path::Tiny"5my %required→ 3 = (6    "JSON::PP" => 1,7    "DBI"      => 0,8    "Path::Tiny" => 0,9);10my $role→ required = $required{$module}1 ? "required" : "optional";11my $install_group→ runtime = $required{$module}1 ? "runtime" : "feature";1213print "module=$moduleJSON::PP\n";14print "role=$rolerequired\n";15print "install_group=$install_groupruntime\n";
    outputmodule=JSON::PP
    role=required
    install_group=runtime
  1. $module ← DBI, %required ← 3, $role ← optional, $install_group ← feature

    4my $module→ DBI = "DBI";5my %required→ 3 = (6    "JSON::PP" => 1,7    "DBI"      => 0,8    "Path::Tiny" => 0,9);10my $role→ optional = $required{$module}0 ? "required" : "optional";11my $install_group→ feature = $required{$module}0 ? "runtime" : "feature";1213print "module=$moduleDBI\n";14print "role=$roleoptional\n";15print "install_group=$install_groupfeature\n";
    outputmodule=DBI
    role=optional
    install_group=feature
  1. $module ← Path::Tiny, %required ← 3, $role ← optional, $install_group ← feature

    4my $module→ Path::Tiny = "Path::Tiny";5my %required→ 3 = (6    "JSON::PP" => 1,7    "DBI"      => 0,8    "Path::Tiny" => 0,9);10my $role→ optional = $required{$module}0 ? "required" : "optional";11my $install_group→ feature = $required{$module}0 ? "runtime" : "feature";1213print "module=$modulePath::Tiny\n";14print "role=$roleoptional\n";15print "install_group=$install_groupfeature\n";
    outputmodule=Path::Tiny
    role=optional
    install_group=feature