http://www.perlmonks.org?node_id=1192869


in reply to Signed Long Hash

Math::BigInt is for arbitrary precision, it doesn't understand boundaries like "signed long".

If your Perl can handle quads in pack, you should be able to just use them, no bigint needed:

#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; my $hash = '18165163011005162717'; my $signed = unpack 'q', pack 'Q', $hash; # Using 'q' woudl work, too +. say $signed eq "-281581062704388899";
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,