No se preocupe por la práctica del golf, el código que tiene se ve muy bien (aparte de las otras respuestas acerca del uso de defined
). Sin embargo, si te encuentras repitiendo este patrón, me vienen a la mente dos cosas.
La primera es obvia, refactorearlo en una función de utilidad, para que tenga my @list = expand($hit).
La segunda pregunta es un poco más profundo - pero me huele más que jugar al golf. El objetivo de los iteradores es consumir a medida que los necesita, de modo que si te encuentras haciendo esto a menudo, ¿estás seguro de que es realmente lo correcto? Tal vez estés moviendo estos datos fuera de tu propia API, por lo que estás obligado a elegir otros, pero si tienes la opción de consumir un iterador en lugar de una lista, quizás esta sea una solución más limpia.
Muéstranos programas de demostración completos, para que podamos ver cosas como cómo obtuviste '$ hit'. –