LINUX.ORG.RU

Проблема ввода с терминала в Perl-скриптах


0

0

Даю команду войти в перловый режим отладки:

kolyan@kolyan:pl$ perl -d -e 0

На приглашение отладчика жму на клавиатуре клавишу Backspace. В ответ получаю не удаление последнего введенного символа, а вывод последовательности ^H.

Такая же проблема происходит, когда в скрипте запрашиваешь строку из стандартного ввода:

$str = <STDIN>;

Если при этом строка вводится с терминала, то редактировать вводимую строку практически невозможно. Вместо Backspace упомянутая ^H, вместо некоторых других управляющих функций похожие последовательности: Home = ^[OH, End = ^[OF.

Как вводить строку в полностью интерактивном режиме? С работающими функциями редактирования вроде Backspace, Home, Delete и т.д.

Подскажите, пожалуйста.

Может, это проблемы терминала?

Eldhenn
()

Что-то путаешь :-/

Даже без всякого дебугера скрипт типа:
perl -e '$x=<STDIN>'
не даст тебе редактировать строку.

То есть из всего редактирования будет работать только Backspace -
это обычный ввод с терминала в canonical mode. Но никаких там
Home,End,стрелочек не будет. Чтобы они были надо использовать
Term::ReadLine.
И BS должен продолжать работать и под дебугером.

Если же у тебя не работает даже BS, AFAIK чота с твоим терминалом.

Если же у тебе есть программа, которая использует именно
Term::ReadLine, то тогда дебугеру надо это сказать:

PERLDB_OPTS='ReadLine=0' perl -d ...

(смотри perldoc perldebug)

HTH

Onanim
()

Да, действительно, проблема была с терминалом. Gnome-multi-terminal не воспринимал правильно клавишу Backspace, когда ввод запрашивался скриптами Perl, да и вообще другими приложениями... Ononim, спасибо большое за советы!

nartamonov
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.