I am using pdl2
(the PDL
shell) also as a my default Perl interactive shell (it loads all the nice plugins for Devel::REPL
). But I am missing the x
dumper-printing alias. p
is nice for piddles but it does not work for a normal array ref or hash ref. I have loaded Data::Dumper
but it lacks an easy way of controlling depth and I like the way you can quickly set depth limits with x
, e.g. x 2 $deep_datastruct
for complex data structures. But with Data::Dumper
the process is more cumbersome:
pdl> say $c
HASH(0x53b0b60)
pdl> p $c
HASH(0x12b14018)
pdl> use Data::Dumper
pdl> p Dumper $c
$VAR1 = {
'c' => {
'c' => 3,
'a' => 1,
'b' => {
'c' => '3',
'a' => '1',
'b' => '2'
}
},
'a' => 1,
'b' => 4
};
pdl> $Data::Dumper::Maxdepth = 1;
pdl> p Dumper $c
$VAR1 = {
'c' => 'HASH(0x97fba70)',
'a' => 1,
'b' => 4
};
In the Perl debugger you can achieve the same thing with x 1 $c
directly. Does pdl2
have something similar and so concise?
[update]
And related with this question: does pdl2
or Devel::REPL
have convenience functions like the Perl debugger commands m
or y
? Or should one create a module with PadWalker
and export them? I would like to use a real REPL instead of the Perl debugger as an interactive shell, but still the Perl debugger has some important things that I don't know how to do with Devel::REPL
or pdl2
.
For example to see all variables (pdl2
only show piddles):
pdl> help vars
PDL variables in package main::
Name Type Dimension Flow State Mem
----------------------------------------------------------------
no PDL objects in package main::
By the way, does someone know a Devel::REPL
plugin for listing all the variables in use (like y
in the debugger, but only the names, not the values) and then have a x
-like to dump the wanted one?
Interactive Mode in Perl can be used on the Command line with the use of Perl Debugger. This interpreter is commonly known as REPL– Read, Evaluate, Print, Loop.
In Perl, the debugger is not a separate program the way it usually is in the typical compiled environment. Instead, the -d flag tells the compiler to insert source information into the parse trees it's about to hand off to the interpreter.
Open a Perl source file, click "Run -> Start Debugging" or hit F5 and observe there is no error as before. Now explore all VSCocde IDE functions working nicely with Perl!
It looks like Devel::REPL provides an straightforward alternative for your first question. Create a file called '.perldlrc' in your home directory that looks like:
use Data::Dumper;
sub x {
my $depth = shift;
$Data::Dumper::Maxdepth = $depth;
print Data::Dumper->Dump([@_])
}
Unfortunately, you need a comma as in:
pdl> x 1, $c
It looks like you can implement the other commands with this same control-file approach. I don't see a way to get rid the need for the comma, although I don't think there's any reason Devel::REPL cannot be made to recognize and parse these kinds of commands.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With