use Tie::Array qw( ); our @ISA = 'Tie::StdArray'; sub FETCH { my ($self, $idx) = @_; warn("Fetching index $idx\n"); return $self->SUPER::FETCH($idx); } my @a; tie @a, __PACKAGE__; $#a = 4; my $s; $s = $a[-@a+1]; # Fetching index 1 $s = $a[-@a]; # Fetching index 0 $s = $a[-@a-1]; # FETCH not called! $s = $a[@a]; # Fetching index 5