#!/usr/local/bin/perl use warnings; use strict; init( [ qw/2 3 5 polka dot bikini/ ] ); my $index = 3; # 'polka' my ($current , $next , $prev ) = get($index); printf "%s\n%s\n%s\n" , $current , $next , $prev; { my ($old , $cursor , $size , @array); sub init { my $a_ref = shift; @array = @{$a_ref}; $size = scalar @array or die "empty array\n"; $cursor = 0; } sub get { $cursor = shift; $old = $cursor++; return ( current() , next_() , prev() ); } sub current { return $array[$old]; } sub prev { return ($old -1) >= 0 ? $array[ $old -1 ] : undef; } sub next_ { return ($old +1) < $size ? $array[ $old +1 ] : undef; } }