Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^5: Why version strings?

by JavaFan (Canon)
on Mar 29, 2011 at 16:24 UTC ( #896218=note: print w/replies, xml ) Need Help??


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

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).

Replies are listed 'Best First'.
Re^6: Why version strings?
by ikegami (Pope) on Mar 29, 2011 at 17:20 UTC

    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?

      Can we just conclude that you don't know the answer to 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.
      either?

        Is that a weird way of letting me know that «BEGIN { require 5.010; }» is buggy in 5.10 and 5.12, but fixed in 5.14? That leaves

        • BEGIN { die if $] < 5.010_000 }
        • use 5.010; no feature ":5.10";
        • { use 5.010; }

        How about:

        BEGIN { die "Not new enough" if $] < 5.016; }

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://896218]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2021-05-10 22:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Perl 7 will be out ...





    Results (108 votes). Check out past polls.

    Notices?