in reply to Re^2: 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.

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.

Replies are listed 'Best First'.
Re^4: warnings pragma anomaly
by choroba (Cardinal) on Oct 19, 2015 at 22:25 UTC
    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.

        You can still do
        perl -MFoo -wce1
        لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

      Good point :)