sub arrayInsertAfterPosition { my ($inArray, $inPosition, $inElement) = @_; my @res = (); my @after = (); my $arrayLength = int @{$inArray}; if ($inPosition < 0) { @after = @{$inArray}; } else { if ($inPosition >= $arrayLength) { $inPosition = $arrayLength - 1; } if ($inPosition < $arrayLength - 1) { @after = @{$inArray}[($inPosition+1)..($arrayLength-1)]; } } push (@res, @{$inArray}[0..$inPosition], $inElement, @after); return @res; } my @tab = qw(A B C D E); my @res = (); @res = arrayInsertAfterPosition (\@tab, -1, 'Test'); print join(', ', @res) . "\n"; @res = arrayInsertAfterPosition (\@tab, 0, 'Test'); print join(', ', @res) . "\n"; @res = arrayInsertAfterPosition (\@tab, 1, 'Test'); print join(', ', @res) . "\n"; @res = arrayInsertAfterPosition (\@tab, 2, 'Test'); print join(', ', @res) . "\n"; @res = arrayInsertAfterPosition (\@tab, 3, 'Test'); print join(', ', @res) . "\n"; @res = arrayInsertAfterPosition (\@tab, 4, 'Test'); print join(', ', @res) . "\n"; @res = arrayInsertAfterPosition (\@tab, 5, 'Test'); print join(', ', @res) . "\n";