Es una limitación de la propia terminal, que solo entiende una entrada muy básica de datos. Leer de la terminal es casi como leer de un archivo: o para adelante o para atrás. Ni siquiera entiende el concepto de "ponte aquí en medio" y "recuerda lo que se ha escrito hasta ahora".
Para paliar estas carencias, se suelen usar bibliotecas que gestionan la entrada de datos, observando lo que hace el usuario (insertar, borrar, sustituir, mover el cursor, etc.).
Un ejemplo es Term::ReadLine y alguno de sus derivados. Por ejemplo, si tenemos instalado Term::ReadLine::Gnu, podemos usar Term::ReadLine para conseguir exactamente lo que quieres:
Using bash Syntax Highlighting
$ perl -MTerm::ReadLine -E '$term = Term::ReadLine->new("Entrada"); $x = $term->readline("Entra un texto: "); say "[$x]"'
Entra un texto: mi casa, tus y mis reglas.
[mi casa, tus y mis reglas.]
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Antes de que el usuario pulse la tecla de Entrar, puede moverse por el texto y modificarlo como quiera. Se puede incluso tener un historial de texto introducido antes.
Observa que cargamos el módulo Term::ReadLine. Él se encargará de leer
Term::ReadLine::Gnu de forma automática, al darse cuenta de que está en un sistema Gnu.
Hay más módulos Term::ReadLine para distintos entornos.