in reply to What is the proper way to suppress a warning in a test file?

Personally, when I send code to CPAN and therefore CPAN Testers, I no longer rely on an exact number of warnings, because I've had issues with that: new versions of Perl may introduce new warnings, old versions of Perl may have warnings that you weren't expecting, and even different OSes might be different. Instead, I would suggest to either test for the presence of specific warnings that one's own code produces, or to test for the absence of specific warnings that should definitely not happen. Update: "No warnings at all" is fine if you're running one version of Perl on one OS, but once that changes, you can't necessarily rely on it. You can of course also try to modify your code to eliminate all warnings on all OSes and Perl versions, that would be optimal, but as you're discovering, that's not always feasible. Or, you can write your tests to expect those warnings, but that's of course not "no warnings at all".

  • Comment on Re: What is the proper way to suppress a warning in a test file?

Replies are listed 'Best First'.
Re^2: What is the proper way to suppress a warning in a test file?
by nysus (Parson) on Nov 08, 2018 at 18:57 UTC

    Interesting. I guess the biggest reason I keep it around is the "uninitialized value" warning as well as other warnings that signal my code is sloppy. How do you check for the "specific warning that definitely should not happen?"

    $PM = "Perl Monk's";
    $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar";
    $nysus = $PM . ' ' . $MCF;
    Click here if you love Perl Monks

      How do you check for the "specific warning that definitely should not happen?"

      I have a simple little function that I include in my test libraries, for example:

      sub warns (&) { my $sub = shift; my @warns; { local $SIG{__WARN__} = sub { push @warns, shift }; $sub->() } return wantarray ? @warns : scalar @warns; }

      Then I'll use it like this:

      sub some_module_code { my $arg = shift; warn "Some custom warning about $arg"; } my @w = warns { some_module_code("foo"); }; is grep({/\bSome custom warning\b/i} @w), 1; is grep({/\bUse of uninitialized value\b/i} @w), 0;