#!perl use strict; use warnings; use Graph::Directed; my $graph = Graph::Directed->new; while ( my $line = ) { chomp $line; my ( $job, @deps ) = split( /,/, $line ); for my $dep (@deps) { $graph->add_edge( $job, $dep ); } } for my $job ( sort ( $graph->vertices ) ) { print "$job requires "; for ( sort ( $graph->all_successors($job) ) ) { print "$_ "; } print "\n"; } __DATA__ job1, job2,job1, job3,job2 job4,job2 job5,job2,job4 job6,jobz joba,job4,jobb jobz,jobbc,job2