#!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 #### job1 requires job2 requires job1 job3 requires job1 job2 job4 requires job1 job2 job5 requires job1 job2 job4 job6 requires job1 job2 jobbc jobz joba requires job1 job2 job4 jobb jobb requires jobbc requires jobz requires job1 job2 jobbc