use Data::Dumper; use strict; use warnings; sub edges2vertices { my %vertices; for my $i ( 0 .. $#_ ) { $vertices{$_[$i][$_]} = 1 for (0 .. $#{$_[$i]}); } return sort keys %vertices; } my @E = ([1,2], [1,3], [2,3,7,8], [2,4], [3,4]); my @nv= edges2vertices(@E); print Dumper(\@nv);