@array = ("NULL","NULL",1,3,70,"NULL","NULL","NULL","NULL", "NULL",50,1,"NULL",4,"NULL","NULL",5,"NULL","NULL","NULL"); $max_element = @array - 1; for $i (0 .. @array-1) { if($array[$i] eq "NULL") { $left_i = $i-1; $right_i = $i; #find the index of the next non null (but the array might end on a null) while($array[$right_i] eq "NULL" && $right_i<=$max_element) { $right_i++; } if($right_i > $max_element) { #if the array ends with nulls then just replace them all w/ $array[$left_i] for $null_index ($i .. $max_element) { $array[$null_index] = $array[$left_i]; } $i = $max_element; } elsif($left_i < 0) { #if the array starts with nulls then just replace all with $array[$right_i] for $null_index ($i .. $right_i - 1) { $array[$null_index] = $array[$right_i]; } $i=$right_i; } else { for $null_index ($i .. $right_i-1) { if($null_index - $left_i == $right_i - $null_index) { $array[$null_index] = ($array[$left_i] + $array[$right_i])/2; } if($null_index - $left_i > $right_i - $null_index) { $array[$null_index] = $array[$right_i]; } if($null_index - $left_i < $right_i - $null_index) { $array[$null_index] = $array[$left_i]; } } $i=$right_i; } } } for $ar (@array) { print $ar . " "; } print "\n"; #OUTPUT #1 1 1 3 70 70 70 60 50 50 50 1 2.5 4 4 5 5 5 5 5