Cody Fendant has asked for the wisdom of the Perl Monks concerning the following question:

The following is a commonly-asked question, but please note it is not my question: "how do I get my keyboard to skip backward and forward using arrow keys in the OSX Terminal in normal circumstances?".

My question is "how do I get my keyboard to skip backward and forward using arrow keys in the OSX Terminal when providing text input interactively to a perl script?".

To explain, my Terminal does all of its arrowing between words and letters just fine, i.e. if I type like this at the command line (bash):

codysmac: ~$ foo bar baz bax

I can skip backward and forward a word at a time, a char at a time, to the start, to the end and so on.

But when I'm interacting with a Perl script, this is no longer the case.

Take this very simple script:

print "foo bar bax baz\n"; print "is this correct?\n"; print "if not, type the correct version:\n"; my $new_version = <STDIN>;

What "shell" or terminal type or other editing mode am I in if I start typing now? Because whatever it is, I can't use the arrow keys to go left and right, or any other shortcuts.

I just get ^[[b and ^[[C for left and right.
  • Comment on What editing mode am I in when interacting with a Perl script using OS X Terminal? Because the keyboard works differently to a normal shell.
  • Select or Download Code

Replies are listed 'Best First'.
Re: What editing mode am I in when interacting with a Perl script using OS X Terminal? Because the keyboard works differently to a normal shell.
by roboticus (Chancellor) on Aug 04, 2015 at 03:51 UTC

    Cody Fendant:

    Typically a program has to provide any fancy editing features. As the ever-popular Anonymous Monk mentions, the package Term::Readline package can give you access to one of the line input libraries. If you get it set up with the Gnu libreadline library, you can get history and quite a bit of editing functionality.

    ...roboticus

    When your only tool is a hammer, all problems look like your thumb.

Re: What editing mode am I in when interacting with a Perl script using OS X Terminal? Because the keyboard works differently to a normal shell.
by 1nickt (Canon) on Aug 04, 2015 at 04:10 UTC

    Hi Cody Fendant, I program on OS X and for interactive scripts I use Term::ReadLine::Perl5, which implements most of the Gnu library in Perl, so you have the features roboticus described, as well as your arrow keys back.

    #!/usr/bin/perl -w use strict; use Term::Readline::Perl5; my $term = Term::ReadLine::Perl5->new(); my $name = $term->readline( 'Name? ' ); print "Hello, $name\n"; __END__
    The way forward always starts with a minimal test.
Re: What editing mode am I in when interacting with a Perl script using OS X Terminal? Because the keyboard works differently to a normal shell.
by Anonymous Monk on Aug 04, 2015 at 01:58 UTC
    you want Term::ReadLine
Re: What editing mode am I in when interacting with a Perl script using OS X Terminal? Because the keyboard works differently to a normal shell.
by stevieb (Canon) on Aug 04, 2015 at 01:48 UTC

    Please share with us what command you use at the command line to open/edit the file.

    For example, I use vi editor for the most part, so when I open a script for editing, I do ~$ vi script.pl.

    -stevieb

      You don't seem to have understood the question. I'm not editing a Perl script. I'm running a Perl script which takes input from the command line. Please read the question again.

        Easy, hoss. You might click on a monk's name and see whom you are addressing before getting snarky.

        The way forward always starts with a minimal test.