in reply to Re: warnings pragma anomaly
in thread warnings pragma anomaly

As the return value of this expression is returned and checked for truthness, it's not used in a void context. Moreover, you can use any true value at the end of a module, and you won't get any warnings. See also Acme::ReturnValue.

Update: You can check the generated lists here.

لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Replies are listed 'Best First'.
Re^3: warnings pragma anomaly
by BrowserUk (Patriarch) on Oct 19, 2015 at 21:59 UTC
    As the return value of this expression is returned and checked for truthness, it's not used in a void context.

    Are you sure about that? If you end a package with just: 1; no warning is produced; but if you end it with just: 42;:

    C:\test>perl -Mstrict -w package x; sub f{ 1 } 42; ^Z Useless use of a constant in void context at - line 5.

    Although it is returned and checked at runtime; at the point of parsing it is in a void context.

    And you can't avoid that by prefixing a return statement either:

    C:\test>perl -Mstrict -w package x; sub f{ 1 } return 42; ^Z Can't return outside a subroutine at - line 3.

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
    In the absence of evidence, opinion is indistinguishable from prejudice.
      I usually don't run modules, I use them. No warning is produced in such situations.
      لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

        True. But before we even start talking about unit tests, it would be nice to have

        perl -wc Foo.pm
        at least come up with the "Foo.pm syntax ok" message and without raising any warnings.

        Given

        package Foo; 42;
        this would give "syntax ok" but also the "useless use of constant in void context" warning, whereas
        package Foo; 1;
        would only give the "syntax ok" message.

        Good point :)