#!/usr/bin/perl -w use strict; my ($name, $path, $req, %visited, @fringe); open F, "dependency.txt" or die; while () { chomp; my ($p, $r); ($p, $r) = /(.*):requires:(.*)/; if (defined $p and ($name) = $p =~ m#.*/(.*)/setup.hint#) { $path->{$name} = $p; @{ $req->{$name} } = split " ", $r; } else { print STDERR "? line $.: $_\n"; } } @fringe = @ARGV; while ($name = shift @fringe) { if (not defined $path->{$name}) { print STDERR "? cannot find package '$name'\n"; next; } $visited{$name} = 1; my ($dep); foreach $dep (@{ $req->{$name} }) { next if ( grep { $_ eq $dep } @fringe or exists $visited{$dep} ); push @fringe, $dep; } } foreach $name (keys %visited) { print "$name\n"; }