From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

strict digraph Perl {
graph [compound=1, concentrate=1, overlap=false, rankdir=LR, ranksep=1, smoothing=triangle, splines=spline];
node [label="\N", shape=record, style=dotted];
edge [minlen=1];
subgraph cluster_1 {
graph [label="Path::IsDev::",
rank=max];
subgraph cluster_2 {
graph [label="Path::IsDev::Heuristic::"];
"Path::IsDev::Heuristic::Changelog" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic::Changelog}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::Heuristic::DevDirMarker" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic::DevDirMarker}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::Heuristic::META" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic::META}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::Heuristic::MYMETA" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic::MYMETA}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::Heuristic::Makefile" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic::Makefile}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::Heuristic::TestDir" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic::TestDir}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::Heuristic::Tool::Dzil" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic::Tool::Dzil}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::Heuristic::Tool::MakeMaker" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic::Tool::MakeMaker}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::Heuristic::Tool::ModuleBuild" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic::Tool::ModuleBuild}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::Heuristic::VCS::Git" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic::VCS::Git}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
}
subgraph cluster_3 {
graph [label="Path::IsDev::HeuristicSet::"];
"Path::IsDev::HeuristicSet::Basic" [label="{{<port1> single_class}|<port2> Path::IsDev::HeuristicSet::Basic}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
}
subgraph cluster_4 {
graph [label="Path::IsDev::NegativeHeuristic::"];
"Path::IsDev::NegativeHeuristic::IsDev::IgnoreFile" [label="{{<port1> single_class}|<port2> Path::IsDev::NegativeHeuristic::IsDev::IgnoreFile}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
}
"Path::IsDev" [label="{{<port1> exporter}|<port2> Path::IsDev}"];
"Path::IsDev::Heuristic" [label="{{<port1> single_class}|<port2> Path::IsDev::Heuristic}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::HeuristicSet" [label="{{<port1> single_class}|<port2> Path::IsDev::HeuristicSet}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::NegativeHeuristic" [label="{{<port1> single_class}|<port2> Path::IsDev::NegativeHeuristic}", shape=Mrecord, style=solid, color="#0343df", fontsize=7, height="0.1"];
"Path::IsDev::Object" [label="{{<port1> class}|<port2> Path::IsDev::Object}", shape=Mrecord, style=solid, color="#7e1e9c", fontsize=7, height="0.1"];
"Path::IsDev::Result" [label="{{<port1> class}|<port2> Path::IsDev::Result}", shape=Mrecord, style=solid, color="#7e1e9c", fontsize=7, height="0.1"];
"Path::IsDev::Role::Heuristic" [label="{{<port1> role}|<port2> Path::IsDev::Role::Heuristic}", shape=Mrecord, style=solid, color="#15b01a", fontsize=7, height="0.1"];
"Path::IsDev::Role::Heuristic::AnyDir" [label="{{<port1> role}|<port2> Path::IsDev::Role::Heuristic::AnyDir}", shape=Mrecord, style=solid, color="#15b01a", fontsize=7, height="0.1"];
"Path::IsDev::Role::Heuristic::AnyFile" [label="{{<port1> role}|<port2> Path::IsDev::Role::Heuristic::AnyFile}", shape=Mrecord, style=solid, color="#15b01a", fontsize=7, height="0.1"];
"Path::IsDev::Role::Heuristic::RegexpFile" [label="{{<port1> role}|<port2> Path::IsDev::Role::Heuristic::RegexpFile}", shape=Mrecord, style=solid, color="#15b01a", fontsize=7, height="0.1"];
"Path::IsDev::Role::HeuristicSet" [label="{{<port1> role}|<port2> Path::IsDev::Role::HeuristicSet}", shape=Mrecord, style=solid, color="#15b01a", fontsize=7, height="0.1"];
"Path::IsDev::Role::HeuristicSet::Simple" [label="{{<port1> role}|<port2> Path::IsDev::Role::HeuristicSet::Simple}", shape=Mrecord, style=solid, color="#15b01a", fontsize=7, height="0.1"];
"Path::IsDev::Role::NegativeHeuristic" [label="{{<port1> role}|<port2> Path::IsDev::Role::NegativeHeuristic}", shape=Mrecord, style=solid, color="#15b01a", fontsize=7, height="0.1"];
"Path::IsDev::Role::NegativeHeuristic::AnyFile" [label="{{<port1> role}|<port2> Path::IsDev::Role::NegativeHeuristic::AnyFile}", shape=Mrecord, style=solid, color="#15b01a", fontsize=7, height="0.1"];
"Path::IsDev::Role::Heuristic" -> "Path::IsDev::Heuristic" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::HeuristicSet" -> "Path::IsDev::HeuristicSet" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::NegativeHeuristic" -> "Path::IsDev::NegativeHeuristic" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic::RegexpFile" -> "Path::IsDev::Heuristic::Changelog" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic::AnyFile" -> "Path::IsDev::Heuristic::DevDirMarker" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic::AnyFile" -> "Path::IsDev::Heuristic::META" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic::AnyFile" -> "Path::IsDev::Heuristic::MYMETA" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic::AnyFile" -> "Path::IsDev::Heuristic::Makefile" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic::AnyDir" -> "Path::IsDev::Heuristic::TestDir" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::HeuristicSet::Simple" -> "Path::IsDev::HeuristicSet::Basic" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic::AnyFile" -> "Path::IsDev::Heuristic::Tool::Dzil" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic::AnyFile" -> "Path::IsDev::Heuristic::Tool::MakeMaker" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic::AnyFile" -> "Path::IsDev::Heuristic::Tool::ModuleBuild" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic::AnyDir" -> "Path::IsDev::Heuristic::VCS::Git" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::NegativeHeuristic::AnyFile" -> "Path::IsDev::NegativeHeuristic::IsDev::IgnoreFile" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic" -> "Path::IsDev::Role::Heuristic::AnyDir" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic" -> "Path::IsDev::Role::Heuristic::AnyFile" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::Heuristic" -> "Path::IsDev::Role::Heuristic::RegexpFile" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::HeuristicSet" -> "Path::IsDev::Role::HeuristicSet::Simple" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
"Path::IsDev::Role::NegativeHeuristic" -> "Path::IsDev::Role::NegativeHeuristic::AnyFile" [arrowhead=open, arrowsize="0.5", color="#653700", dir=forward, fontsize=6, headclip=1, label="consumed by", samehead=head, tailclip=1, weight=5];
}
"Class::Tiny::Object" [label="<port1> Class::Tiny::Object"];
"Class::Tiny::Object" -> "Path::IsDev::Object" [arrowhead=open, arrowsize="0.5", color="#ff81c0", dir=forward, fontsize=6, headclip=1, label="inherited by", samehead=head, tailclip=1, weight=10];
"Class::Tiny::Object" -> "Path::IsDev::Result" [arrowhead=open, arrowsize="0.5", color="#ff81c0", dir=forward, fontsize=6, headclip=1, label="inherited by", samehead=head, tailclip=1, weight=10];
}