in reply to Re: Arithmetic bug within Time:Piece?
in thread Arithmetic bug within Time:Piece?

Yep the POD talks about that differences of Time::Piece objects are returned as seconds Time::Seconds objects.

The only example given of adding a Time-Seconds' constant is ONE_DAY, which is mostly safe.

And the POD of Time::Seconds says that those constants are not objects but only seconds. ¹

The documentation is indeed misleading ... and unfortunately again a case were "core module" means "old module".

Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Je suis Charlie!

¹) Since perl does not (yet?) support constant objects, these constants are in seconds only, so you cannot, for example, do this: print ONE_WEEK->minutes;

  • Comment on Re^2: Arithmetic bug within Time:Piece?

Replies are listed 'Best First'.
Re^3: Arithmetic bug within Time:Piece?
by LanX (Saint) on Oct 02, 2015 at 23:52 UTC
    > Since perl does not (yet?) support constant objects, these constants are in seconds only, so you cannot, for example, do this: print ONE_WEEK->minutes;

    Could someone please enlighten me if this is an (old) problem?

    I had no problems to store an object in a constant.

    update
    use strict; use warnings; { package MY_TIME; sub print_sec { my $self =shift; print $self->[0]; } } use constant ONE_HOUR => bless [3600], "MY_TIME"; ONE_HOUR->print_sec; __END__ 3600

    Cheers Rolf
    (addicted to the Perl Programming Language and ☆☆☆☆ :)
    Je suis Charlie!

      Could someone please enlighten me if this is a (old) problem? I had no problems to store an object in a constant.

      I think its probably a unclear statement, as its unlikely MSERGEANT didn't know you could write

      sub ONE_WEEK() { return bless ... }

      http://backpan.perl.org/authors/id/M/MS/MSERGEANT/ dates the module to 2001

      perldeltas doesn't show anything relevant , perlbug neither,

      But free has more candidates http://perl5.git.perl.org/perl.git/search/HEAD?pg=7;s=constant;st=free but nothing seems on point, even just looking at old constant.pm shows using references as constants ....

      So maybe matt was confused at the time :) I doubt I could compile something before before 5.6.2 to check

        My guess is he wanted to primarily store an integer for seconds into a constant.

        Since one can only bless references this would have complicated to simply get a number in nummeric context. (it's still possible with an overload of "0+" )

        edit

        strange, his code does overloading, including "0+"

        Maybe an old version of his code didn't use constant but this other technique to put a immutable literal into a package variable... like *PI = \3.14159265358979;

        well who knows ... old code ... sigh

        Cheers Rolf
        (addicted to the Perl Programming Language and ☆☆☆☆ :)
        Je suis Charlie!

Re^3: Arithmetic bug within Time:Piece?
by stevieb (Canon) on Oct 03, 2015 at 03:12 UTC
    The documentation is indeed misleading ... and unfortunately again a case were "core module" means "old module".

    By the way you mention this, it sounds like it's been well known. I've never put together ties between 'core' and `stale'. Are there other examples of this?

    If so, my synopsis would be 'patch if one knows better'.

    -stevieb

      Most core modules were introduced a long time ago ( antique coding standards) and have to comply to backwards compatibility (hindered further development).

      The debugger for instance is sometimes using the main:: namespace and is very hard to maintain.

      It would need a major rewrite, but this would most certainly break many products building on top of it.

      (actually such incompatibilities introduced by patches happen quite often)

      Or take Time::Seconds, changing the constants to objects would certainly break other code expecting plain scalars in edge cases.

      now just try to patch and start to argue with P5P...

      Keep in mind that many tests are missing since its old code.(sic)

      I could link to a talk were a IT guru explains why module authors shouldn't aspire to enter standard library status, b/c they loose all control to apply changes.

      Ironically its Guido van Rossum ...

      Update: see

      minute 49

      Cheers Rolf
      (addicted to the Perl Programming Language and ☆☆☆☆ :)
      Je suis Charlie!