The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Caroline - Yet another line editing library

SYNOPSIS

    use Caroline;

    my $c = Caroline->new;
    while (defined(my $line = $c->readline('> ')) {
        if ($line =~ /\S/) {
            print eval $line;
        }
    }

DESCRIPTION

Caroline is yet another line editing library like Term::ReadLine::Gnu.

This module supports

History handling
Complition

METHODS

my $caroline = Caroline->new();

Create new Caroline instance.

Options are:

history : ArrayRef[Str]

You can pass the older history data for constructor.

completion_callback : CodeRef

You can write completion callback function like this:

    my $c = Caroline->new(
        completion_callback => sub {
            my ($line) = @_;
            if ($line eq 'h') {
                return (
                    'hello',
                    'hello there'
                );
            } elsif ($line eq 'm') {
                return (
                    '突然のmattn'
                );
            }
            return;
        },
    );
my $line = $caroline->read($prompt);

Read line with $prompt.

Trailing newline is removed. Returns undef on EOF.

$caroline->history()

Get the current history data in ArrayRef[Str] .

Multi byte character support

If you want to support multi byte characters, you need to set binmode to STDIN. You can add the following code before call Caroline.

    use Term::Encoding qw(term_encoding);
    my $encoding = term_encoding();
    binmode *STDIN, ":encoding(${encoding})";

LICENSE

Copyright (C) tokuhirom.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

TODO

Win32 Support
Search with C-r

SEE ALSO

https://github.com/antirez/linenoise/blob/master/linenoise.c

AUTHOR

tokuhirom <tokuhirom@gmail.com>