in reply to Backspace & delete

As dragonchild says, it's probably your term that is causing the problem. If you're seeing ^H or ^? showing up in your input when you test your program, it's not Perl that's the problem, but your stty setting for erase that's not totally jiving with what you type.

Perl, like any other UNIX program, just takes what it's given. That is, unless you're using something like Term::ReadLine which flips the terminal into "raw" mode. If you're seeing something messed up, the chances are that it would happen with something as simple as cat as well.

Replies are listed 'Best First'.
Re: Re: Backspace & delete
by billysara (Acolyte) on Aug 02, 2001 at 02:17 UTC
    I can't test which terms exactly at the moment as I'm working off site and am relying on reports from other users - though some of them will definetly be using the hyperterminal from win9x.
    Two have reported the old ^H. I was really wondering if there is a perl way to do it without `stty`-ing...

    Billy

      Since this can be a problem with other applications too, why don't you fix it outside of Perl? It's definitely not a Perl problem after all. Naturally Perl can fix it, but being lazy programmers we want to fix it only once, and for all, don't we? :-)

      Fixing the backspace problem is simple:

      • At the shell prompt, type cat or equivalent program waiting for your input;
      • Type a few letters then hit the key you want to act as delete (erase) key
      • You'll probably see ^? or ^H instead of what you expect
      • Quit the program (usually Enter followed by ^D will do
      • Type stty erase ^H or ^?, according to the character you've seen
      • Try again the cat test, this time you should be able to delete properly

      This is all you need, just add the command to your .tcsh or .bashrc or equivalent, so that it will be permanent and it will help other programs that do simple I/O too.

      Note: some versions of stty want you to type a ^ followed by the caracter, others want you to type the exact character. In the latter case, most modern shells (and many editors) allows you to press ^V (that is, a real CTRL+V) followed by the real ^? or ^H. Again, because of the special meaning of a ? for the shell, you might have to type \? instead.

      -- TMTOWTDI