<div dir="ltr"><div>What version of Dancer are you using? The behavior changed in v1.3111 when the import_warnings  config setting (import warnings by default) was replaced by  global_warnings (don't import warnings by default). See <a href="https://metacpan.org/pod/Dancer::Config#global_warnings-boolean-default:-false">https://metacpan.org/pod/Dancer::Config#global_warnings-boolean-default:-false</a><br><br></div>I get no warnings for the following app with Dancer 1.3138, using the default config file:<br><br>package MyApp;<br>use Dancer ':syntax';<br>no warnings 'uninitialized';<br><br>get '/' => sub {<br>    my $foo;<br>    print $foo;<br>};<br><br>true;<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 15, 2015 at 2:55 PM, Sam Kington <span dir="ltr"><<a href="mailto:sam@illuminated.co.uk" target="_blank">sam@illuminated.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
At $WORK we have a codebase that’s currently running under perl 5.14.2 that we want to move to perl 5.20.3. (Can’t use 5.22 because, via another module that we use, we use Coro, which blows up spectacularly if you’re running a version of Perl that the author of Coro disapproves of.)<br>
<br>
The codebase makes regular use of smartmatch (albeit only in the “match a variable against this array” sense). This produces warnings in modern Perls, so my plan was to extend our standard “enable all pragmas according to house policy” module to disable experimental::smartmatch warnings, under Perls that are known to warn about this but still implement it in the same way. That gives us a year or two to get rid of it once p5p decide what they’re going to do with smartmatch.<br>
<br>
Unfortunately, Dancer turns the warnings back on. Even if you’d previously disabled them.<br>
<br>
I can understand saying “if you haven’t enabled warnings, you really should have, so Dancer is going to enable them for you”. I can also understand people saying “use Dancer” and expecting warnings to be enabled, so they don’t have to explicitly say “use warnings”. That’s fine.<br>
<br>
But if I’ve explicitly enabled most but not all warnings, Dancer shouldn’t trample all over that.<br>
<br>
As it is, I have to write this to avoid warnings:<br>
<br>
#!/usr/bin/env perl<br>
<br>
use 5.20.1;<br>
no warnings 'experimental::smartmatch';<br>
no warnings 'uninitialized';<br>
<br>
use Dancer qw(:syntax);<br>
<br>
no warnings 'experimental::smartmatch';<br>
no warnings 'uninitialized';<br>
<br>
my $foo = shift;<br>
given ($foo) {<br>
    when ('foo') {<br>
        say "This is foo, the King of variable names";<br>
    }<br>
    when (['bar', 'baz']) {<br>
        say "A lesser pretender $_";<br>
    }<br>
    default {<br>
        say "$_ is dead to me";<br>
    }<br>
}<br>
<br>
This is a toy example just to make the point: rather than that one use Dancer statement I could have a whole bunch of use statements, and Dancer could have been pulled in by some other module, possibly not even something I imported directly.<br>
<br>
Now, I could get rid of one line in the example above by saying<br>
<br>
no warnings::anywhere ‘uninitialized’;<br>
<br>
as that would turn that warning off globally, but warnings::everywhere doesn’t work with compile-time pragmas.<br>
<br>
Is there a way to find out whether the calling package has enabled warnings, and if so don’t enable all of them again? Because that would be ideal.<br>
<span class="HOEnZb"><font color="#888888"><br>
Sam<br>
--<br>
Website: <a href="http://www.illuminated.co.uk/" rel="noreferrer" target="_blank">http://www.illuminated.co.uk/</a><br>
<br>
_______________________________________________<br>
dancer-users mailing list<br>
<a href="mailto:dancer-users@dancer.pm">dancer-users@dancer.pm</a><br>
<a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" rel="noreferrer" target="_blank">http://lists.preshweb.co.uk/mailman/listinfo/dancer-users</a><br>
</font></span></blockquote></div><br></div>