NAME

Term::ShellKit::Commands - Basic shell functions

SYNOPSIS

> perl -Iblib/lib -MTerm::ShellKit -eshell "kit Dev"
Term::ShellKit: Starting interactive shell; commands include help, exit.
Activating Term::ShellKit::Commands
Activating Term::ShellKit::Dev

Term::ShellKit> require MyClass
MyClass

Term::ShellKit> show_package MyClass
Package Stash for MyClass
Subs:
  sub smee = "CODE(0x73fa4)"
  sub twiddle = "CODE(0xc8530)"

COMMANDS

The following commands are available.

require

Load a Perl module or library.

  • require module

reload

Reload any Perl modules which have changed since they were last loaded.

  • reload

You can use the shell reload command to read in changes to your modules while continuing to work in the same environment.

Start with the following code in MyObject.pm:

package MyObject;

sub new {
  my $class = shift;
  bless { }, $class;
}

1;

Then start your shell and load your module:

~> perl lib/Shell/Shell.pm
Term::ShellKit: Starting interactive shell
Term::ShellKit> require MyObject

You can now start creating instances of your class:

Term::ShellKit> $example = MyObject->new()
$example = MyObject->new(): MyObject=HASH(0x1e5118)

Your class doesn't do anything else yet, so trying to call other methods on your new object will result in an error:

Term::ShellKit> $example->twiddle
$example->twiddle: Failed.
  shell_cmd_method: 
  shell_cmd_eval: Can't locate object method "twiddle" via package "MyObject" at (eval 12) line 1.

Let's define that method -- leave the shell running, and add the following method to your package:

sub twiddle {
  my $self = shift;
  return "Song and dance goes here...";
}

Then return to the shell and run the "reload" command to load your changes. You can now start calling your new method, even on objects that were created earlier:

Term::ShellKit> reload
Term::ShellKit: reload MyObject.pm 
Term::ShellKit> $example->twiddle
$example->twiddle: Song and dance goes here...

Subsequent additions or revisions to the module will be available the next time you run the "reload" command. (Note that if you remove a method from your module code, it will not be deleted from the live workspace; you'll need to quit and restart the shell to achieve this.)

If there's an error in your code, you'll get a message similar to this when you try to reload:

Term::ShellKit> reload
reload: Failed.
  shell_cmd_method: Type of arg 1 to shift must be array (not return)
at /tmp/MyObject.pm line 10, near ""Song and dance goes here...";"

To view the problematic line, you can copy and paste in the file and line number, taking advantage of the default alias that maps "at" to "show_file":

  Term::ShellKit> at /tmp/MyObject.pm line 10 
	      > show_file /tmp/MyObject.pm line 10
	      > show_file /tmp/MyObject.pm window 2 line 10

      my $self = shift
      return "Song and dance goes here...";
    }

If you need to see more of the code you can re-run the show_file command with a window argument that's larger than the default of 2, but that's generally enough to spot errors like semicolon missing from the above.

show_package

  • show_package package_name

> perl -Iblib/lib -MTerm::ShellKit -eshell "kit Dev"
Term::ShellKit: Starting interactive shell; commands include help, exit.
Activating Term::ShellKit::Commands
Activating Term::ShellKit::Dev

Term::ShellKit> show_package Carp
Package Stash for Carp
Scalars:
  $CarpLevel = "0"
  $MaxArgLen = "64"
  $MaxArgNums = "8"
  $MaxEvalLen = "0"
  $Verbose = "0"
Arrays:
  @EXPORT = "confess, croak, carp"
  @EXPORT_FAIL = "verbose"
  @EXPORT_OK = "cluck, verbose"
  @ISA = "Exporter"
Hashes:
  %EXPORT = "carp => 1, cluck => 1, confess => 1, croak => 1, verbose => 1"
  %EXPORT_FAIL = "&verbose => 1, verbose => 1"
Subs:
  sub carp = "CODEREF"
  sub cluck = "CODEREF"
  sub confess = "CODEREF"
  sub croak = "CODEREF"
  sub export_fail = "CODEREF"
  sub longmess = "CODEREF"
  sub shortmess = "CODEREF"

Term::ShellKit> exit

SEE ALSO

Term::ShellKit