in reply to Re: Passing on "use"s
in thread Passing on "use"s

Why the explicit 'use strict' when you're already loading 'v5.36' ?

Replies are listed 'Best First'.
Re^3: Passing on "use"s
by afoken (Chancellor) on Nov 03, 2023 at 20:20 UTC
    Why the explicit 'use strict' when you're already loading 'v5.36' ?

    Having both allows to later change your mind and support older Perl versions (perhaps because someone paid for that). Removing use v5.36 would implicitly disable strict otherwise.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

      G'day Alexander,

      "Having both allows to later change your mind and support older Perl versions ... Removing use v5.36 would implicitly disable strict otherwise."

      In the dim, distant past I made a similar comment regarding code I'd posted which included some equivalent redundancy (although I don't recall details now); on that basis, I've upvoted your post. However, I changed my thinking on that and, accordingly, would argue against what you have here.

      I'll just talk about this generally as a number of related scenarios apply; for example, removing any use VERSION statement, changing to various earlier VERSIONs, changing to a VERSION earlier than 5.12, and so on. These comments would also apply, to a certain degree, when starting with a VERSION later than 5.36.

      See "perl5360delta: use v5.36" for the features enabled by that VERSION.

      Here's just some of the things you'd have to deal with:

      • strict is enabled for all versions since (and including) 5.12; so you wouldn't necessarily lose that.
      • warnings was first enabled in 5.36; so you would definitely lose that.
      • signatures were introduced in 5.20, so you might lose that and need to rewrite "sub find_pm($workDir) {...}" in the code presented (and potentially rewrite similar code elsewhere).
      • signatures were experimental prior to 5.36. Local policy may mean not using them or including use experimental signatures (or similar).
      • builtin was introduced in 5.36; so you would definitely lose that and need to rewrite any code using it.

      Having to remember to explicitly "use strict;" may not be necessary and, even it was, it pales into insignificance against all of the other things you'd have to remember to do.

      — Ken

Re^3: Passing on "use"s
by cavac (Prior) on Nov 03, 2023 at 07:43 UTC

    Yes, it's technically not required. But after nearly two decades of me preaching to other people to "use strict", a Perl script without that line just freaks me out. The force of habit is strong in this one...

    PerlMonks XP is useless? Not anymore: XPD - Do more with your PerlMonks XP