Debes quitar el my() de la línea 20.
En la línea 10 estabas, correctamente, definiendo la variable local $answer.
Pero en la 20 estabas definiendo "otra" "nueva" variable local $answer, que será local a las llaves donde se encuentra (el bucle do()).
Por eso también fallaba sin la línea 10: until() no sabía a qué variable $answer te estabas refiriendo porque la definías dentro, en la línea 20, y no es conocida fuera, ni siquiera en un until() pegado al bloque.
Código Perl:
Ver originalmy $respuesta;
do {
$respuesta = ... # presentamos el menú
# ...
} until ($respuesta);
En este ejemplo, $respuesta de las líneas 4 y 6 se refieren a la única variable definida en la línea 1.
En Perl hay que tener claro el contexto o ámbito en que se mueven las variables. Puede ser lioso, pero es muy potente cuando quieres auténticas variables locales en sitios muy pequeños, que no quieres que influyan para nada en un código que está muchas líneas más allá.