while ($i <= $#array)
みたいなループの中で、
$array[$i + 2]
を参照すると、$#array が変わってしまって意図した条件でループを抜けない

どうしたもんか