#!/usr/bin/perl use strict; my @seg = ( [ 1, 1, 2, 1 ], [ 5, 5, 1, 5 ], [ 2, 3, 5, 3 ], [ 5, 3, 5, 5 ], [ 2, 1, 2, 3 ], [ 1, 5, 1, 1 ]); my %starts=map{"@$_[0,1]",$_} @seg; my @sorted_segs = my $cur = $seg[0]; while (1) { my $next = $starts{"@$cur[2,3]"}; die "your polygon is broken\n" if !$next; $next==$seg[0] ? last : push @sorted_segs,$next; $cur = $next; } print "@$_\n" for @sorted_segs;