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,
| [reply] [d/l] [select] |
| [reply] |
use strict;
use warnings;
use MIME::Base64 'encode_base64';
use Test::More tests => 1;
is (encode_base64((pack 'q', -281581062704388899), ''), '/Befg+4HJN0')
+;
gives '3SQH7oOfF/w=' instead. | [reply] [d/l] |
Update: Sorry, posted in the wrong place, this was supposed to be an answer to the OP (see below)
| [reply] |
| [reply] |