use strict; use warnings; use Set::Tiny 'set'; my @paths = ( [ qw(A B F G) ], [ qw(A B) ], [ qw(A B X) ], [ qw(A B C D E F G) ], [ qw(I J K L M) ], ); my @sets; push @sets, set(@$_) for @paths; @sets = sort { $a->size <=> $b->size } @sets; # UPDATED my @filtered; LINE: for my $i (0 .. $#sets) { my $set_i = $sets[$i]; for my $j ($i + 1 .. $#sets) { next LINE if $set_i->is_subset($sets[$j]); } push @filtered, $set_i; } print $_->as_string, "\n" for @filtered; #### for my $j (reverse($i + 1 .. $#sets))