in reply to Turn off FATAL warnings in 3rd party module

If disabling the warning altogether doesn't work, the next best thing would be to not use the module at all IMHO. The doc on Fatal Warnings is quite explicit about the fact that use warnings FATAL => 'all'; is a bad idea. One obvious replacement for this module is to just copy it without the problematic line, since it's a pure perl module.

I would actually avoid just catching the exception though. Because the exception means the function add_child has been interrupted before finishing, so the state of the object is not guarranteed to be correct (eg: _fix_width hasn't been called at all).

Edit: or just let the author fix his module. I should be more patient and not always jump to the fastest fix so carelessly. Thanks to stevieb and ron.savage for the actual correction :D

Replies are listed 'Best First'.
Re^2: Turn off FATAL warnings in 3rd party module
by ron.savage (Acolyte) on Jun 03, 2019 at 23:53 UTC
    Hi Stevieb9 submitted a git pull request re this issue, which I've accepted. So, V 1.14 is now on CPAN.
Re^2: Turn off FATAL warnings in 3rd party module
by bliako (Abbot) on Jun 03, 2019 at 15:48 UTC

    Good point Eily about no guarantees add_child() has finished what's supposed to be doing without interruption if I enclose the offending statement in eval {}. The warning causes a die after all. For the record, it does seem to add the child beyond 99 and fails in doing the necessary housekeeping.

    Also, even if it succeeds in the small script I provided, in my real use-case I must eval each and every Tree method just in case it runs over the recursion limit.

    So, I am not doing the eval. I am looking for a replacement module (any suggestions) and filing a request to author.

      "I am looking for a replacement module (any suggestions) and filing a request to author."

      I'd simply fork the repo, create a new branch, make your change, and install the updated distribution manually from your repository. Then, in Github, create a Pull request (PR) with your updated branch for possible inclusion into the original software.

      If you're unfamiliar with that process, let me know and I'll quickly do it for you, and provide you a link to the updated repo for you to install from.

        Took a moment to take care of it. Here's the PR, and my repo (PR was approved, use the original repo link instead. I assume a new CPAN release is imminent) that you can clone from (git clone https://github.com/ronsavage/Tree), then checkout the "remove_fatal_warnings" branch (git checkout remove_fatal_warnings), then install as normal:

        perl Makefile.PL make make test make install

        Output after installing the changes:

        Deep recursion on subroutine "Tree::_fix_height" at /home/spek/perl5/p +erlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1/Tree.pm line 333. Deep recursion on subroutine "Tree::_fix_width" at /home/spek/perl5/pe +rlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1/Tree.pm line 346. Deep recursion on subroutine "Tree::event" at /home/spek/perl5/perlbre +w/perls/perl-5.26.1/lib/site_perl/5.26.1/Tree.pm line 198. success

        Update: I just added a quick and dirty test file to the PR to ensure the new functionality Does The Right Thing. I do that normally in the process of creating a PR, but I had urgent business to tend to earlier and figured the test could wait a bit. Note: I used the exact code OP specified to demonstrate the problem.