http://www.perlmonks.org?node_id=1101677


in reply to Re^3: Turning on regexp debugging at runtime
in thread Turning on regexp debugging at runtime

The name DEBUG_REGEX is made up, and can be anything (note the test of $ENV{DEBUG_REGEX} in the code).

How about:

my $re1 = qr/a/; my $re2 = do { use if $ENV{FOO_DEBUG_REGEX}, qw/re Debug EXECUTE/; qr/b/ }; my $re3 = qr/c/; my $str = "ab"; $str =~ $re1; $str =~ $re2; $str =~ $re3;

will output run-time debug info on $re2 only when the environment var FOO_DEBUG_REGEX is set.

I'm not sure if this can be done dynamically in the debugger, perhaps another monk with more experience there can help. The documentation does say that use re 'debug'; has both compile-time and run-time effects.

Replies are listed 'Best First'.
Re^5: Turning on regexp debugging at runtime
by SBECK (Chaplain) on Sep 23, 2014 at 17:11 UTC

    Thanks. I misunderstood DEBUG_REGEX.

    Unfortunately, the actual situation is very complicated. There are literally hundreds of regexps, and I'd like to be able to debug any one of them at any time. Also, they are called multiple times, so I might only be interested in the 4th time that a regexp is called.

    Unfortunately, the "use regexp" pragma is applied when the regexp is created... I want something to turn debugging on when a regexp is matched against.

    It's really not that big of a deal... I can workaround it by simply ignoring a lot of unwanted output. I was just hoping for something a little cleaner during debugging time.

      This technique was completely new to me as well, but judging from the example code it looks like you can test for pretty much any condition you like if an environment variable doesn't suit your needs.

      -- FloydATC

      Time flies when you don't know what you're doing

      Try this:

      { use re debug; my $re = qr/myregex/; } ... if ($item =~ /$re/) { ... }

      Update: SBECK had said:

      Unfortunately, the "use regexp" pragma is applied when the regexp is created... I want something to turn debugging on when a regexp is matched against.

      so I tried to make a helpful suggestion.

      Sorry it was not helpful

        Try it yourself. $re will be scoped only inside the block, so can't be used outside the curly brackets in the if.
        لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ