我試圖想出一個創造性的方式來確定依賴關係,因此我可以按正確的順序啓動測試的迴歸。Perl依賴關係樹求解器
例如:
a: d, e, f
b: c, d
c: f
d: e
這意味着試驗 「一」 取決於測試 「d,e和f」 等的完成。
我有下面的代碼,將打印「葉」節點「e」和「f」,但我堅持如何去遍歷和打印父節點。任何提示將非常感謝。
謝謝!
my @input = ("a:d,e,f", "b:c,d", "c:f", "d:e");
my %Tests =();
my %Built =();
## Build Structure
foreach my $elem (@input) {
my $depends = [];
my $target;
($target,$depends) = parseData($elem);
$Tests{$target} = $depends; ## Setting array ref to hashkey $target
}
sub parseData {
my $data = shift;
my ($target, $deps) = split(/:/, $data);
my @deps;
@deps = split(/,/, $deps);
return ($target,\@deps);
}
foreach my $key (keys %Tests) {
doIT(\%Tests, \%Built, $key);
}
sub doIT {
my ($testRef, $builtRef, $target) = @_;
my $depends = $testRef->{$target};
if(exists $builtRef->{$target}) {
return;
}
if(!$depends) {
## No dependency, build it
print "RunTest($target)\n";
$builtRef->{$target}++;
return;
}
foreach my $dep (@$depends) {
doIT($testRef, $builtRef, $dep);
}
}
這是整潔的方法!我不太明白下面這行代碼的作用:$ children {$ _} || = {}。你能詳細說明這實際上在做什麼嗎?謝謝! – user3528108
'%children'在哈希結構的哈希中保存父對子關係。 '$ children {$ a_parent} {$ a_child} = 1'。由於一些元素(比如'e'和'f''沒有任何子元素,所以只要我看到一個孩子就會初始化這個結構。要查看數據結構的格式,只要'使用Data :: Dump; dd \%孩子;'在第一個'for'循環之後' – Miller
非常好,謝謝你的解釋! – user3528108