Hi All,

I would like to pass hash: %{$routes{"ROUTE-252"}} instead of %routes but
got this error:

[budi@dev bin]$ ./print_path.pl
Type of arg 1 to each must be hash (not hash element) at
./print_path.plline 38, near "}) "
Execution of ./print_path.pl aborted due to compilation errors.

----
#use strict;
use Graph::Directed;
use Data::Dumper;

my %routes = (
    "ROUTE-252" => {
    #  src => dest
       CX77 => "ABEP",
       ABEP => 441,
       441 => 427,
       427 => 444,
       444 => "MGWQ",
       MGWQ => "CDEF"
    },

    "ROUTE-432" => {
       AAA => "BBB",
       BBB => "CCC",
       CCC => "DDD",
       DDD => "EEE",
       EEE => "FFF",
       XXX => "YYY",
       YYY => "ZZZ",
    }
);

my $id = "ROUTE-252";
print Dumper $routes{$id};

print_path($id, \%{$routes{$id}});

sub print_path {
    my ($label, $edges) = @_;
    my $graph = Graph::Directed->new;

    while (my ($start, $end) = each $edges{$label}) {
    #while (my ($start, $end) = each %{$routes{$label}}) {
        $graph->add_edge($start, $end);
    }

    my @sinks = $graph->sink_vertices;
    for my $source ($graph->source_vertices) {
        for my $sink (grep $graph->is_sink_vertex($_),
$graph->all_successors($source)) {
            print "$label: ", join ' - ', $graph->path_vertices($source,
$sink);
            print "\n";
        }
    }


}

Reply via email to