I am unable to evaluate ‘modern Perl’ code inside the Perl debugger. It works OK when debugging the code in a file, but not from the prompt.
Minimal example:
# Activating 5-10 features with -E (it works)
$ perl -E 'say "x"'
x
# Calling the debugger with -E
# It works for infile code, but for prompt line code...
$ perl -dEbug Loading DB routines from perl5db.pl version 1.33
DB say "x"
String found where operator expected at (eval 16)[/local-perl/lib/5.12.1/perl5db.pl:638] line 2, near "say "x""
at (eval 16)[/local-perl/lib/5.12.1/perl5db.pl:638] line 2
eval '($@, $!, $^E, $,, $/, $\\, $^W) = @saved;package main; $^D = $^D | $DB::db_stop;say "x";
(Note: the same happens with "use feature ‘:5.10’".)
Am I missing something?
I found a reference to the issue here, but it’s about a year old. However, the relevant portion of the Perl source hasn’t changed since and can be seen here. Essentially, if you take a look at
toke.cin the Perl source, you see the following:Basically, the debugger is loaded before the
-Eflag is processed, so the features aren’t yet enabled when the debugger gets loaded. The gist of this is that you can’t currently use-Ewith the-dcommand. If you want to usesay,switch, or any other feature from the debug prompt, you have to do it like this:The closest I’ve seen to a solution is:
Which I found at PerlMonks.