Это потому, что ReadKey
читает ключ . Когда вы нажимаете x 3 раза, а затем вводите , это 4 клавиши. На самом деле, даже правильный выбор ( 1 Enter ) составляет 2 клавиши; вы просто не замечаете, потому что ваша программа завершается немедленно.
Это менее очевидно, потому что режим ввода по умолчанию буферизует нажатия клавиш до тех пор, пока вы не нажмете Enter . В этот момент ReadKey
начнет возвращать каждое нажатие клавиши по одному.
Решение зависит от поведения, которое вы ищете. Если вы хотите нажать Enter , прежде чем воздействовать на вход, вы можете просто прочитать строку за раз (с помощью стандартного оператора <>
). Вам вообще не нужно Term::ReadKey
.
Если вы хотите выполнить действие сразу после нажатия клавиши, вам нужно использовать функцию Term::ReadKey
ReadMode
, чтобы изменить буферизацию ввода. Не забудьте добавить END { ReadMode(0) }
для восстановления исходного режима при выходе из программы.