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


in reply to Action at a distance

Whatever it is, it certainly doesn't DWIM.

Yeah, it is a pitfall... which is common to all objects which try to behave like they are primitive data types. These are like photons, which behave either as waves or as particles, depending on how you look at them. No wonder that they show quantum effects.

My favourite workaround for this is to write $x = $bi * 1;. This is like $x = $b1->copy but also works if $b1 is just a plain integer or a Math::Complex object (these does not offer a copy method) or even a Math::Matrix or Math::Quaternion object.

Replies are listed 'Best First'.
Re^2: Action at a distance
by syphilis (Archbishop) on Nov 04, 2022 at 12:52 UTC
    My favourite workaround for this is to write $x = $bi * 1;

    Yes, that works fine ... for those who:
    1) are aware that it's needed;
    and
    2) remember to do it.
    I'd like a better solution, but I don't yet see that one exists.

    You can also work around the problem by doing $x = Math::BigInt->new($bi), but the brevity of doing $x = $bi is a very attractive alternative ... or, at least, would be if it DWIMmed.
    Doing $x = $bi will not call the sub that overloads '=' until an attempted modification of the value of $x has been detected and, while doing $x++ triggers that detection, doing $x->binc() apparently does not.

    Thanks for the thoughts so far.
    Is there something already posted in this thread to which I should pay more attention ?

    Cheers,
    Rob