$navigation_map = { first_page => { PREVIOUS => '', NEXT => 'second_page', }, second_page => { PREVIOUS => 'first_page', NEXT => 'third_page', }, third_page => { PREVIOUS => 'second_page', NEXT => 'fourth_page', }, fourth_page => { PREVIOUS => 'third_page', NEXT => '', }, }; #### $navigation_map = [qw(first_page second_page third_page fourth_page)]; #### package List::Navigator; sub new { my $class = shift; my ($list) = @_; my $data = {}; my ($previous, $next); for my $item (@$list) { $data->{$item}{PREVIOUS} = $previous; $data->{$previous}{NEXT} = $item if defined $previous; $previous = $item; } bless $data, $class; } #### my $nav_list = [qw( first_page second_page third_page fourth_page )]; my $navigation_map = List::Navigator->new( $nav_list );