#use strict; use warnings; use Term::ReadLine; my $prompt = "prompt> "; my $prog = Term::ReadLine->new('Script'); $prog->ornaments(0); while (defined (my $cmd = $prog->readline($prompt))) { chomp $cmd; # nothing if ($cmd =~ /^\s*$/) { next } # exit if ($cmd =~ /^\s*exit\s*$/) { last } # execute eval "package Sandbox; $cmd"; warn $@ if $@; print "\n" } package Sandbox; sub command { print "Special command"; } sub names { my @keys = sort keys %Sandbox::; for my $key (@keys) { my $glob = \*{"Sandbox::$key"}; print "\$$key\n" if defined ${*{$glob}{SCALAR}}; print "\@$key\n" if defined *{$glob}{ARRAY}; print "\%$key\n" if defined *{$glob}{HASH}; } }