CPAN and Tooling Concepts
Lockfile Selection
A lockfile-like table records the exact version selected for each dependency.
lockfile
A lockfile records resolved versions so future installs can choose the same versions.
Lockfile Selection
lockfile_selection.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
my $module = "JSON";
my %locked = (
JSON => "4.10",
DBI => "1.643",
);
my $version = $locked{$module} // "none";
my $status = $version eq "none" ? "unlocked" : "locked";
print "module=$module\n";
print "version=$version\n";
print "status=$status\n";
use strict;
use warnings;
my $module = "DBI";
my %locked = (
JSON => "4.10",
DBI => "1.643",
);
my $version = $locked{$module} // "none";
my $status = $version eq "none" ? "unlocked" : "locked";
print "module=$module\n";
print "version=$version\n";
print "status=$status\n";
use strict;
use warnings;
my $module = "Missing::Tool";
my %locked = (
JSON => "4.10",
DBI => "1.643",
);
my $version = $locked{$module} // "none";
my $status = $version eq "none" ? "unlocked" : "locked";
print "module=$module\n";
print "version=$version\n";
print "status=$status\n";
$module ← JSON, %locked ← 2, $version ← 4.10, $status ← locked
4my $module→ JSON = "JSON"; #@module="DBI", "Missing::Tool"5my %locked→ 2 = (6 JSON => "4.10",7 DBI => "1.643",8);9my $version→ 4.10 = $locked{$module}4.10 // "none";10my $status→ locked = $version4.10 eq "none" ? "unlocked" : "locked";1112print "module=$moduleJSON\n";13print "version=$version4.10\n";14print "status=$statuslocked\n";outputmodule=JSON version=4.10 status=locked
$module ← DBI, %locked ← 2, $version ← 1.643, $status ← locked
4my $module→ DBI = "DBI";5my %locked→ 2 = (6 JSON => "4.10",7 DBI => "1.643",8);9my $version→ 1.643 = $locked{$module}1.643 // "none";10my $status→ locked = $version1.643 eq "none" ? "unlocked" : "locked";1112print "module=$moduleDBI\n";13print "version=$version1.643\n";14print "status=$statuslocked\n";outputmodule=DBI version=1.643 status=locked
$module ← Missing::Tool, %locked ← 2, $version ← none, $status ← unlocked
4my $module→ Missing::Tool = "Missing::Tool";5my %locked→ 2 = (6 JSON => "4.10",7 DBI => "1.643",8);9my $version→ none = $locked{$module}(empty) // "none";10my $status→ unlocked = $versionnone eq "none" ? "unlocked" : "locked";1112print "module=$moduleMissing::Tool\n";13print "version=$versionnone\n";14print "status=$statusunlocked\n";outputmodule=Missing::Tool version=none status=unlocked