Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
PerlMonks Unable to find … in history

by daxim (Curate)
on Aug 22, 2019 at 10:49 UTC ( #11104850=perlquestion: print w/replies, xml ) Need Help??

daxim has asked for the wisdom of the Perl Monks concerning the following question:

  • run
  • execute !!1
Got: Unable to find !1 in history

Expect: 1

How do I make it stop? I have already tried without success:

#!/usr/bin/env perl use 5.030; use lib 'lib'; use utf8; use strictures; use autodie qw(:all); use Moops; use Kavorka; use perl5i::2 -skip => [qw(Signatures)]; use Devel::REPL::Plugin::ReadLineHistory::WithoutExpansion; $_REPL->load_plugin(qw( Colors DataPrinter DumpHistory FindVariable History Interrupt LexEnv MultiLine::PPI OutputCache Packages Peek PPI Refresh ReadLineHistory::WithoutExpansion ShowClass Completion CompletionDriver::Globals CompletionDriver::INC CompletionDriver::Keywords CompletionDriver::LexEnv CompletionDriver::Methods CompletionDriver::Turtles )); $_REPL->term->Attribs->{history_quotes_inhibit_expansion} = 1; $_REPL->term->Attribs->{do_expand} = 0;

Replies are listed 'Best First'.
Re: Unable to find … in history
by Corion (Pope) on Aug 22, 2019 at 11:01 UTC

    Looking through the source code of Devel::REPL::Plugin::History, it seems that Devel::REPL::Plugin::ReadLineHistory::WithoutExpansion simply fiddles the wrong bits (well, the ReadLine expansion of the underlying Term::ReadLine object). The source code in Devel::REPL::Plugin::History ignores all that and does the ! expansion in a hardcoded way:

    # Devel::REPL::Plugin::History around 'read' => sub { my $orig = shift; my ($self, @args) = @_; my $line = $self->$orig(@args); if (defined $line) { if ($line =~ m/^!(.*)$/) { my $call = $1; $line = $self->history_call($call); if (defined $line) { $self->print($line."\n"); } else { return "'Unable to find ${call} in history'"; } } if ($line =~ m/\S/) { $self->push_history($line); } } return $line; };

    Looking at the code more, prefixing !!1 by whitespace should work around the issue in the way you want...

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://11104850]
Approved by Marshall
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (4)
As of 2020-09-27 01:50 GMT
Find Nodes?
    Voting Booth?
    If at first I don’t succeed, I …

    Results (142 votes). Check out past polls.