shajiindia has asked for the wisdom of the Perl Monks concerning the following question:

I am using Perl 5.14.2 on Windows 7 and I wonder to which version does it defaults to if nothing is mentioned in the script. In order to use new features of 5.10 I make use of 'use 5.010' to use 'say', 'given-when' and 'autodie' etc. in the script even though I am running a newer version i.e 5.14.2. So my question is how to find which version Perl takes into consideration if I am using 5.14.2 on Windows 7
  • Comment on Which version does Perl 5.14.2 defaults to?

Replies are listed 'Best First'.
Re: Which version does Perl 5.14.2 defaults to?
by JavaFan (Canon) on Mar 01, 2012 at 11:58 UTC
    It defaults to 5.14.2.

    If you use 5.10, you get most of the new features of 5.10, regardless whether you use a use 5.10 or not. For give/when, state and say, you need to enable them using the feature pragma -- which will be enabled for you if you do a use 5.10.

    This is the same with 5.14.2. You get most of the features of 5.14.2, except then ones you need to enable explicit. Writing use 5.14.2 implies the features give, state, say, and unicode_strings are enabled, and that strict is turned on.

Re: Which version does Perl 5.14.2 defaults to?
by Anonymous Monk on Mar 01, 2012 at 12:04 UTC
    The question is a bit muddy with the terminology, but I can guess what you're aiming at.

    As of the versions 5.10 .. 5.16, declaring no version with use enables none of the feature. You still get to use the smart-match and defined-or operators.

    In conclusion, it feels like old Perl (5.6 .. 5.8) with extra operators.

      Plus the bug fixes, the performance improvements, the new regexp-constructs, etc.

      What I meant is if I do not use any particular feature i.e version. Which version is taken by default?

      For example running this simple script in version 5.14.2 throws the following error without using 'use 5.014'. In Java if I am using JDK 7 all features of JDK 7 applies to the program by default. How it applies to Perl?


      #Script follows say "Hello, World"; #Output follows String found where operator expected at F:\PerlDemo\references\feature +.pl line 1 , near "say "Hello, World"" (Do you need to predeclare say?) syntax error at F:\PerlDemo\references\feature.pl line 1, near "say "H +ello, Worl d"" Execution of F:\PerlDemo\references\feature.pl aborted due to compilat +ion errors .

        5.10 introduced new syntactic constructs such as say. If older code (that was written with an older version) already had a function called say(), Perl 5.10 would error out because of a conflict. That is why the new functions and constructs are only available through a pragma.

        You are supposed to declare the minimum version of Perl that your code demands. This would include regular expression features and whatnot. It is safe to say use 5.014 but if someone will try to run your code with 5.12, he will get an error whether or not you actually use 5.14's new features. This is largely just a convenience for a person trying to figure out whether his version of Perl is good enough for your script.

        Which version is taken by default?
        If you don't understand the answers given to you, ask more specific questions.

        Asking the same question again isn't going to give you a different answer. The answer remains, "if you run 5.14.2, you get 5.14.2. Nothing less, nothing more".