#Returns a copy of the input padded to size specified by pad_size with value pad_value.
#If pad_size is positive then the array is padded on the right, if it's negative then on the left.
#If the absolute value of pad_size is less than or equal to the length of the input then no padding takes place.
#int pad_size, mixed pad_value, array input
sub array_pad{
my($pad_size, $pad_value, @array) = @_;
#this is just to get the absolute value of the pad_size
my $temp = $pad_size;
if($pad_size < 0){
$temp = $temp * -1;
}#if
#first let's see if the pad_size is less than or equal to the array size, return 0 no padding
my $input_size = @array;
if($temp <= $input_size){
return 0;
}#if
#since it didn't return 0, time to pad
#if the pad_size is < 0, pad on the left, else the right
if($pad_size < 0){
my @retval;
$temp = $temp - $input_size;
for(my $i=0;$i<$temp;$i++){
unshift(@array, $pad_value);
}#for
return @array;
}#if
else{
$temp = $pad_size - $input_size;
for(my $i=0;$i<$temp;$i++){
push(@array, $pad_value);
}#for
return @array;
}#else
}#array_pad
####
sub p{my($i,$z,@f)=@_;abs$i>@f&&$i<0?@f=(($z) x abs($i+@f),@f):(@f[@f..$i-1]=($z)x($i-@f));@f}
####
use Test::More tests => 4;
my @x = 1 .. 5;
is_deeply([p( 3, 'x', @x)], [ @x ]);
is_deeply([p(-3, 'x', @x)], [ @x ]);
is_deeply([p( 7, 'x', @x)], [ @x, 'x', 'x' ]);
is_deeply([p(-7, 'x', @x)], [ 'x', 'x', @x ]);