use strictures 2; use Module::Runtime qw(use_module); use DX::Utils qw(:builders); { package FakeReadline; sub readline { return undef unless defined(my $line = readline($_[0])); print $_[1].$line; return $line; } sub history_add {} sub isa { require Caroline; return 1 if Caroline->isa($_[1]); } } use_module('DX::ShellFrontend')->new( session_mode => 'shell', session => use_module('DX::ShellSession')->new( shell_state => use_module('DX::ShellState')->new( mode => 'shell', template_query_state => use_module('DX::QueryState')->new( predicates => { 'eq' => use_module('DX::Predicate::Eq')->new, member_at => use_module('DX::Predicate::MemberAt')->new, dict => use_module('DX::Predicate::Dict')->new, }, globals => dict(), proposition_sequence => use_module('DX::PropositionSequence')->new_empty, ), trace_these => {}, ), ), (@ARGV ? (readline => do { open my $fh, '<', $ARGV[0] or die "Couldn't open script: $!"; bless($fh, 'FakeReadline') }) : () ), )->repl