LOGO
____ _ _
| _ \ _ _ _ __ | |_(_)_ __ ___ ___
| |_) | | | | '_ \| __| | '_ ` _ \ / _ \
| _ <| |_| | | | | |_| | | | | | | __/
|_| \_\\__,_|_| |_|\__|_|_| |_| |_|\___|
____ _
| _ \ ___| |__ _ _ __ _ __ _ ___ _ __
| | | |/ _ \ '_ \| | | |/ _` |/ _` |/ _ \ '__|
| |_| | __/ |_) | |_| | (_| | (_| | __/ |
|____/ \___|_.__/ \__,_|\__, |\__, |\___|_|
|___/ |___/
NAME
Runtime::Debugger - Easy to use REPL with existing lexicals support.
VERSION
Version 0.04
SYNOPSIS
tl;dr - Easy to use REPL with existing lexicals support.
(empahsis on "existing" since I have not yet found this support in others modules).
Try with this command line:
perl -MRuntime::Debugger -E 'my $str1 = "str-1"; our $str2 = "str-2"; my @arr1 = "arr-1"; our @arr2 = "arr-2"; my %hash1 = qw(hash 1); our %hash2 = qw(hash 2); eval run; say $@'
DESCRIPTION
One can usually just do this:
# Insert this where you want to pause:
$DB::single = 1;
# Then run the perl debugger to navigate there quickly:
PERLDBOPT='Nonstop' perl -d my_script
If that works for then great and dont' bother using this module!
Unfortunately for me, it was not working due to the scenario in which a script evals another perl test file and I would have liked to pause inside the test and see whats going on without having to keep rerunning the whole test over and over.
This module basically drops in a read,evaludate,print loop (REPL) whereever you need like so:
use Runtime::Debugger;
eval run; # Not sure how to avoid using eval here while
# also being able to keep the lexical scope.
# Any ideas ? :)
Press tab to autocomplete any lexical variables in scope (where "eval run" is found).
Saves history locally.
Can use 'p' to pretty print a variable or structure.
New Variables
Currently its not possible to create any new lexicals variables while I have not yet found a way to run "eval" with a higher scope of lexicals. (perhaps there is another way?)
You can make global variables though if:
- By default ($var=123) - Using our (our $var=123) - Given the full path ($My::var = 123)
SUBROUTINES/METHODS
run
Runs the REPL (dont forget eval!)
eval run
Sets $@
to the exit reason like 'INT' (Control-C) or 'q' (Normal exit/quit).
h
Show help section.
p
Data::Dumper::Dump anything.
p 123
p [1, 2, 3]
Can adjust the maxdepth (default is 1) to see with: "#Number".
p { a => [1, 2, 3] } #1
Output:
{
'a' => 'ARRAY(0x55fd914a3d80)'
}
Set maxdepth to '0' to show all nested structures.
hist
Show history of commands.
By default will show 20 commands:
hist
Same thing:
hist 20
Can show more:
hist 50
uniq
Return a list of uniq values.
ENVIRONMENT
Install required library:
sudo apt install libreadline-dev
SEE ALSO
https://metacpan.org/pod/Devel::REPL
Great extendable module!
Unfortunately, I did not find a way to get the lexical variables in a scope. (maybe missed a plugin?!)
https://metacpan.org/pod/Reply
This module also looked nice, but same issue.
AUTHOR
Tim Potapov, <tim.potapov[AT]gmail.com>
BUGS
Please report any (other) bugs or feature requests to https://github.com/poti1/runtime-debugger/issues.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Runtime::Debugger
You can also look for information at:
https://metacpan.org/Runtime::Debugger https://github.com/poti1/runtime-debugger
LICENSE AND COPYRIGHT
This software is Copyright (c) 2022 by Tim Potapov.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)