http://qs321.pair.com?node_id=11119259


in reply to Re^2: RFC: Version::Easy
in thread RFC: Version::Easy

This module would replace the boilerplate of $VERSION =~ tr/_//d; with the new boilerplate of use Version::Easy;. This doesn't seem like a significant improvement, and adds several dependencies. use version; already accomplishes basically the same thing as this module.

The original question was about a test that was extracting a version number using MM->parse_version. Any tool doing "static" version extraction isn't aided by a module like Version::Easy.

Replies are listed 'Best First'.
Re^4: RFC: Version::Easy
by LanX (Saint) on Jul 13, 2020 at 21:17 UTC
    > the new boilerplate of use 'Version::Easy'

    • It's far easier to explain use MODULE to a beginner
    • as already said, this could already be activated in a meta package
    • you don't need an our declaration
    • you can catch format errors right when developing
    • you can catch multiple $VERSION errors by making it readonly

    > Any tool doing "static" version extraction isn't aided by a module like Version::Easy.

    I think you were the one suggesting using tr/_// after declaration, in which way do static parsers do better with your approach?

    I think you were the one pointing to the need for developers to check $VERSION in the their tool chain, like test suite?

    An object is more robust towards comparing different formats.

    > and adds several dependencies.

    I only used core modules, and version.pm is loaded anyway in every Perl run using use.

    The dependency to Tie::StdScalar could easily be removed.

    Questions

    • I realize that MakeMaker documents that it can't parse v-strings but I can't find the code for ->parse_version and my tests show any quoted string.°
    • Who exactly calls MakeMaker? The author using a recent Perl, or the user who might be using Perl 5.8?
    • it's it possible to install a new version of MakeMaker via dependency?

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

    °) looks like v-string here means the literal v1.2.3 notation while quoted strings "v1.2.3" are ok

      "version.pm is loaded anyway in every Perl run using use."

      No, it isn't.

      $ perl -e'use strict;use warnings;CORE::say for sort keys %INC' strict.pm warnings.pm
        > No, it isn't.

        Something is ...

        ... running B::Xref on a minimalist script shows the namespace being magically populated

        t_float.pl (definitions) 0 version & ("" + subdef t_float.pl (definitions) 0 version & () + subdef t_float.pl (definitions) 0 version & (* + subdef t_float.pl (definitions) 0 version & (*= + subdef t_float.pl (definitions) 0 version & (+ + subdef t_float.pl (definitions) 0 version & (+= + subdef t_float.pl (definitions) 0 version & (- + subdef t_float.pl (definitions) 0 version & (-= + subdef t_float.pl (definitions) 0 version & (/ + subdef t_float.pl (definitions) 0 version & (/= + subdef t_float.pl (definitions) 0 version & (0+ + subdef t_float.pl (definitions) 0 version & (<=> + subdef t_float.pl (definitions) 0 version & (abs + subdef t_float.pl (definitions) 0 version & (bool + subdef t_float.pl (definitions) 0 version & (cmp + subdef t_float.pl (definitions) 0 version & (nomethod + subdef t_float.pl (definitions) 0 version & _VERSION + subdef t_float.pl (definitions) 0 version & boolean + subdef t_float.pl (definitions) 0 version & declare + subdef t_float.pl (definitions) 0 version & is_alpha + subdef t_float.pl (definitions) 0 version & is_qv + subdef t_float.pl (definitions) 0 version & new + subdef t_float.pl (definitions) 0 version & noop + subdef t_float.pl (definitions) 0 version & normal + subdef t_float.pl (definitions) 0 version & numify + subdef t_float.pl (definitions) 0 version & parse + subdef t_float.pl (definitions) 0 version & qv + subdef t_float.pl (definitions) 0 version & stringify + subdef t_float.pl (definitions) 0 version & vcmp + subdef t_float.pl (main) 3 float $ VERSION + intro

        d:\exp\version>type t_float.pl package float; our $VERSION = 'v1.0234'; d:\exp\version>

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery