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

> 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!

Replies are listed 'Best First'.
Re^4: Arithmetic bug within Time:Piece?
by Anonymous Monk on Oct 03, 2015 at 00:17 UTC

    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!