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; }