1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
package SDL::Shell;
use IO::File;
use SDL::Console;
@ISA = qw/ SDL::Console /;
my %cmds = (
'sub' => sub { my ($self,$params) = @_;
my ($routine,$body) = ($params =~ /(\w+)\s+{(.*)}/);
print "Defining $routine as { $body }\n";
my $tmpsub;
eval "sub $routine { $body }";
eval "\$tmpsub = sub { $body }";
$@ ? $self->print("Error $@") : $self->print("OK");
SDL::Console::AddCommand($routine,$tmpsub);
},
':' => sub { my ($self, $params) = @_;
$params =~ s/;$//g;
eval "\$self->print($params)";
$@ ? $self->print("Error $@"): $self->print("OK");
},
'!' => sub { my ($self,$params) = @_; $self->print(`$params`); },
'?' => sub { my ($self,$params) = @_; $self->print(`perldoc $params`); },
':q' => sub { exit(0); },
);
for (keys %cmds ) {
SDL::Console::AddCommand($_,$cmds{$_});
}
sub new {
my ($class,%options) = @_;
my $self = new SDL::Console %options;
bless $self, ref($class) || $class; $self;
}
sub process {
my ($self,$event) = @_;
SDL::Console::Event($event);
}
1;
__END__;
=pod
=head1 NAME
SDL::Shell - a perl extension
=head1 DESCRIPTION
L<SDL::Shell> is a module for creating a simple interactive programming L<SDL::Console>.
This module is very incomplete and buggy. Use at your own risk.
=head1 AUTHOR
David J. Goehrig
=head1 SEE ALSO
L<perl> L<SDL::Console>
=cut
|