Project Organization and Maintenance
Dependency Policy
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
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";
$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
$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
$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