use strictures 2; use Module::Runtime qw(use_module); use DX::Utils qw(dict deparse); use Devel::Dwarn; use Try::Tiny; BEGIN { *u = \&use_module } my $scope = u('DX::Scope')->new( predicates => { map +( $_ => u('DX::Predicate::'.join('', map ucfirst, split '_', $_))->new ), qw(eq member_at is_dict) }, globals => dict(), locals => [], ); my $exp = u('DX::Expander')->new; my $tcl = u('Tcl')->new; foreach my $pred (keys %{$scope->predicates}) { $tcl->CreateCommand($pred => sub { my (undef, undef, undef, @args) = @_; Dwarn [ $pred, $exp->expand_args(@args) ]; }); } my $rl = u('Caroline')->new; while (my $line = $rl->readline('$ ')) { try { $tcl->Eval($line); } catch { warn "Eval error: $_"; }; $rl->history_add($line); }