in reply to How do I get warnings to work properly?

I believe that the use warnings pragma is meant to be package scoped so if you want your caller to affect the warning levels in your package, then you need to provide routines in your package that change your package's warning levels and have the caller use those.

        - tye (but my friends call me "Tye")

Replies are listed 'Best First'.
Re: (tye)Re: How do I get warnings to work properly?
by rrwo (Friar) on Dec 11, 2000 at 18:56 UTC

    I did a bit of hacking with warnings.pm. What's throwing the module off is its use of the caller function.

    Here is an illustration:

    package MyAbc;
    
    warnings::register;
    
    sub foo
    {
      warnings::warn "foo", if (warnings::enabled);
      bar;
    }
    
    sub bar
    {
      warnings::warn "bar", if (warnings::enabled);
    }
    

    Warnings will work in foo because it is "top-level", but they do not work in bar because it's a function within a function.

    That is, they don't work if I use warnings 'MyAbc', but they will work if I run Perl with the -w switch.

    Correction ... if I run foo from a calling module, we don't see the warning from foo but we do see it from bar. However, when we run bar directly we don't see it.

    Even stranger, a module that I'm working on has the opposite effect of my correction. This is strange indeed.

Re: (tye)Re: How do I get warnings to work properly?
by rrwo (Friar) on Dec 09, 2000 at 03:02 UTC

    Any idea how to do this? From the warnings documentation it looks like one just says:

       use warnings 'MyPackage';
    

    or

       no warnings 'MyPackage';
    

    Assuming one has called use warnings::regsiter() from within MyPackage. Is there some other way to do this? I've even tried putting the use warnings::register in the BEGIN or INIT blocks to see if that would work.