The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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