El "vacío",
por definición, no se puede "ver", principalmente, porque está vacío.
O, dicho de otra manera: Si tuvieras un valor vacío, ¿qué valor quieres guardar en la base de datos?
¿
'' o
0 o
'NULL'?
Si cambias el print que tienes en tu código, por
print "[$id_plan[$i]]";entonces lo verás. Mejor dicho, no lo verás. Solo verás que sí existe el valor, pero vacío.
En Perl, los valores vacíos se convierten en cadenas de texto vacías, cuando se tratan en contexto de cadena, y en el valor 0 cuando se tratan en contexto numérico.
P.D. Usar @id_plan[$i] es un error. El '@' inicial indica que quieres obtener una lista de valores del array @id_plan, pero en realidad solo estás recuperando uno solo. Para eso, tienes que usar '$', como te he puesto en mi código.