http://www.perlmonks.org?node_id=896119


in reply to Re^2: Why version strings?
in thread Why version strings?

$ perl -M5.014 -e1 Perl v5.14.0 required--this is only v5.12.2, stopped. BEGIN failed--compilation aborted.
I fail to understand how that answers my question:
I don't know whether there's a (single-line) syntax that at compile time checks for 5.10, but which doesn't enable features.
If I substitute 5.010 for 5.014, 5.10 features are enabled:
$ perl -M5.010 -e 'say "foo"' foo

Replies are listed 'Best First'.
Re^4: Why version strings?
by ikegami (Patriarch) on Mar 29, 2011 at 15:33 UTC
    You can use require for version checks, but a better solution is to put it in the installation script.
      You can use require for version checks
      That delays the version check to run-time, resulting in unwanted compilation errors:
      $ perl-5.8.8 -e 'require 5.010; /1++/' Nested quantifiers in regex; marked by <-- HERE in m/1++ <-- HERE / at + -e line 1.
      as opposed to
      $ perl-5.8.8 -e 'use 5.010; /1++/' Perl v5.10.0 required--this is only v5.8.8, stopped at -e line 1. BEGIN failed--compilation aborted at -e line 1.
      but a better solution is to put it in the installation script.
      That would be an argument against the entire use 5.XXX; syntax; it also assumes there's only one Perl version on the system - and it will never change. Not to mention many scripts don't come with an installation script. (For instance, most complete programs posted on Perlmonks are presented as-is, without an installation script).

        That delays the version check to run-time,

        You know how to execute code at compile-time.

        That would be an argument against the entire use 5.XXX; syntax;

        There may be the premise for an argument, but there's no an argument. Could you actually state this argument? I can't guess what it could be.

        it also assumes there's only one Perl version on the system

        No it doesn't because each has its own lib directory.

        Before you mention PERL5LIB or local::lib, consider that they already break when you use them with more than one version of Perl. (PERL5LIB breaks if the directory was built using the suggested INSTALL_BASE, and local::lib breaks because it uses INSTALL_BASE.)

        Not to mention many scripts don't come with an installation script.

        So? Are you trying to say that no scripts should come with an installation script?