NAME

App::PerlShell - Perl Shell

SYNOPSIS

use App::PerlShell;
my $shell = App::PerlShell->new();
$shell->run;

DESCRIPTION

App::PerlShell creates an interactive Perl shell. From it, Perl commands can be executed. There are some additional commands helpful in any interactive shell.

Why Yet Another Perl Shell?

I needed an interactive Perl Shell for some Perl applications I was writing and found several options on CPAN:

  • Perl::Shell

  • perlconsole

  • Devel::REPL

All of which are excellent modules, but none had everything I wanted without a ton of external dependencies. I didn't want that trade off; I wanted functions without dependencies.

I also wanted to emulate a shell - not necessarily a REPL (Read-Evaluate-Parse-Loop). In the way sh, bash, csh and other *nix or cmd.exe or PowerShell on Windows are a shell - I wanted a Perl Shell. For example, many of the above modules will evaluate an expression:

5+1
6

If I enter 5+1 in cmd.exe or bash, I don't get 6, I get an error. In a Perl program, if I have a line 5+1;, I get an error in execution. If I really want 6, I need to print 5+1;. And so it should be in the Perl Shell.

This is much closer to a command prompt / terminal than a REPL. As such, some basic shell commands are provided, like ls, cd and pwd for example.

CAVEATS

For command recall using the up/down arrows in *nix, you will need Term::ReadLine::Gnu installed. This module will function fine without it as Term::ReadLine is a core module; however, command recall using the up/down arrows will not work.

METHODS

new() - create a new Shell object

my $shell = App::PerlShell->new([OPTIONS]);

Create a new App::PerlShell object with OPTIONS as optional parameters. Valid options are:

Option     Description                             Default
------     -----------                             -------
-execute   Valid Perl code ending statements with  (none)
           semicolon (;).
-feature   Perl feature set to use e.g., ":5.10"   :default
-homedir   Specify home directory.                 $ENV{HOME} or
           Used for `cd' with no argument.         $ENV{USERPROFILE}
-lexical   Require "my" for variables.             (off)
           Requires Lexical::Persistence
-package   Package to impersonate.  Execute all    App::PerlShell
           commands as if in this package.
-prompt    Shell prompt.                           Perl>
-session   Session file to log commands.           (none)
-skipvars  Variables to ignore in `variables'      $VERSION, @ISA,
           command.                                @EXPORT

run() - run the shell

$shell->run();

Run the shell. Provides interactive environment for entering commands.

COMMANDS

In the interactive shell, all valid Perl commands can be entered. This includes constructs like for () {} and if () {} ... else {} as well as any subs from use'd modules. The following are also provided.

cd [('directory')]

Change directory to optional 'directory'. No argument changes to 'homedir'. Optional return value is current directory (directory before change).

clear
cls

Clear screen.

commands [('SEARCH')]

Displays available commands. Commands are essentially 'sub's defined in the current package. With 'SEARCH', displays matching commands. Optional return value is array with commands.

debug

Print command so far (don't execute) at multiline input 'More?' prompt. Must be used as debug only, no semicolon starting at first position in input.

dir [('OPTIONS')]
ls [('OPTIONS')]

Directory listing. 'OPTIONS' are system directory listing command options. Optional return value is array of output.

dumper $var

Displays $var with Data::Dumper.

env [('SEARCH')]

Displays environment variables. With 'SEARCH', displays matching environment variables. Optional return value is hash with environment variables names as keys and values as values.

exit

Exit shell.

help

Display shell help.

modules [('SEARCH')]

Displays used modules. With 'SEARCH', displays matching used modules. Optional return value is hash with module names as keys and file locations as values.

perldoc [('OPTIONS')]

Open perldoc for current PACKAGE. 'OPTIONS' can start with '::' to append to current PACKAGE, be a full Package name or use perldoc command line options (e.g., -f pack).

pwd

Print working directory. Optional return value is result.

session ('file')

Open session file. Only logs Perl commands. Appends to already existing file. Use session (':close') to end.

variables

List user defined variables currently active in current package in shell.

version

Print version information.

EXPORT

This module exports the COMMANDS into each Package namespace.

EXAMPLES

This distribution comes with a script (installed to the default "bin" install directory) that not only demonstrates example uses but also provides functional execution.

SEE ALSO

App::PerlShell::Config, App::PerlShell::ModRefresh, App::PerlShell::LexPersist

LICENSE

This software is released under the same terms as Perl itself. If you don't know what that means visit http://perl.com/.

AUTHOR

Copyright (c) 2015-2022 Michael Vincent

http://www.VinsWorld.com

All rights reserved