in reply to Re^4: Debugger actions: On which lines?
in thread Debugger actions: On which lines?

It doesn't "fix the issue for me". Did you run the script under the debugger all the way?

Despite your results, using -w still turns warnings on globally, which is why the OP encountered the error with his code. See the demonstration below.

Of course none of this answers his original question, i.e. why is the action executed on every line after it's first executed?

[23:11][nick:~/monks]$ cat 1138950-2.pl #!/usr/bin/perl -w use strict; use warnings; my $x = 3; my $y = 0; for(1..3){ $y = $x; $y++; $x -= $y; } [23:11][nick:~/monks]$ perl -d 1138950-2.pl Loading DB routines from perl5db.pl version 1.49 Editor support available. Enter h or 'h h' for help, or 'man perldebug' for more help. main::(1138950-2.pl:6): my $x = 3; DB<1> a 11 say $y + DB<2> n + main::(1138950-2.pl:7): my $y = 0; DB<2> + main::(1138950-2.pl:9): for(1..3){ DB<2> + main::(1138950-2.pl:10): $y = $x; DB<2> + main::(1138950-2.pl:11): $y++; 3 DB<2> + main::(1138950-2.pl:12): $x -= $y; 4 DB<2> + main::(1138950-2.pl:10): $y = $x; 4 DB<2> + main::(1138950-2.pl:11): $y++; -1 DB<2> + main::(1138950-2.pl:12): $x -= $y; 0 DB<2> + main::(1138950-2.pl:10): $y = $x; 0 DB<2> + main::(1138950-2.pl:11): $y++; -1 DB<2> + main::(1138950-2.pl:12): $x -= $y; 0 DB<2> + Debugged program terminated. Use q to quit or R to restart, use o inhibit_exit to avoid stopping after program termination, h q, h R or h o to get additional info. Use of uninitialized value $y in say at (eval 18)[/Users/nick/perl5/pe +rlbrew/perls/perl-5.22.0/lib/5.22.0/perl5db.pl:737] line 1. at (eval 18)[/Users/nick/perl5/perlbrew/perls/perl-5.22.0/lib/5.22.0/ +perl5db.pl:737] line 1. eval 'no strict; ($@, $!, $^E, $,, $/, $\\, $^W) = @DB::saved;pack +age main; say $y; ' called at /Users/nick/perl5/perlbrew/perls/perl-5.22.0/lib/5.22.0/pe +rl5db.pl line 737 DB::eval called at /Users/nick/perl5/perlbrew/perls/perl-5.22.0/li +b/5.22.0/perl5db.pl line 2681 DB::DB called at /Users/nick/perl5/perlbrew/perls/perl-5.22.0/lib/ +5.22.0/perl5db.pl line 10345 DB::fake::at_exit() called at /Users/nick/perl5/perlbrew/perls/per +l-5.22.0/lib/5.22.0/perl5db.pl line 9916 DB::END() called at (eval 18)[/Users/nick/perl5/perlbrew/perls/per +l-5.22.0/lib/5.22.0/perl5db.pl:737] line 0 eval {...} called at (eval 18)[/Users/nick/perl5/perlbrew/perls/pe +rl-5.22.0/lib/5.22.0/perl5db.pl:737] line 0 DB<2>

Compare with no -w switch:

[23:15][nick:~/monks]$ cat 1138950-3.pl #!/usr/bin/perl use strict; use warnings; my $x = 3; my $y = 0; for(1..3){ $y = $x; $y++; $x -= $y; } [23:15][nick:~/monks]$ perl -d 1138950-3.pl Loading DB routines from perl5db.pl version 1.49 Editor support available. Enter h or 'h h' for help, or 'man perldebug' for more help. main::(1138950-3.pl:6): my $x = 3; DB<1> a 11 say $y + DB<2> n + main::(1138950-3.pl:7): my $y = 0; DB<2> + main::(1138950-3.pl:9): for(1..3){ DB<2> + main::(1138950-3.pl:10): $y = $x; DB<2> + main::(1138950-3.pl:11): $y++; 3 DB<2> + main::(1138950-3.pl:12): $x -= $y; 4 DB<2> + main::(1138950-3.pl:10): $y = $x; 4 DB<2> + main::(1138950-3.pl:11): $y++; -1 DB<2> + main::(1138950-3.pl:12): $x -= $y; 0 DB<2> + main::(1138950-3.pl:10): $y = $x; 0 DB<2> + main::(1138950-3.pl:11): $y++; -1 DB<2> + main::(1138950-3.pl:12): $x -= $y; 0 DB<2> + Debugged program terminated. Use q to quit or R to restart, use o inhibit_exit to avoid stopping after program termination, h q, h R or h o to get additional info. DB<2> + Use 'q' to quit or 'R' to restart. 'h q' for details.
The way forward always starts with a minimal test.

Replies are listed 'Best First'.
Re^6: Debugger actions: On which lines?
by james28909 (Deacon) on Aug 18, 2015 at 09:09 UTC
    Maybe its the version of perl im using. Im also on windows. when I run perl -d script.pl I get a gui and I can step thru each line of code. I get no errors at all using the code I posted. I can remove the -w or the whole shebang and it makes no difference in -d or any other instance of it running.
      And what is the point of having this shebang line:
      #!/usr/bin/perl -w
      or even more:
      #!/usr/bin/perl
      under Windows?

      It makes very little sense...

        At least three decent reasons in general: show intent, help other scripts/utilities with file type/content discovery, and portability.

        I never use the shebang unless i am in VM. I just copied code as is.