Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I use arbitrary length integers in Perl?

Is there any standard way to use integers of arbitrary length in Perl? I am working on code that generates x64 assembly for tests, and I'm tired of manipulating 32 bits at a time.

I'm using Perl 5.10.0, for what it's worth.

like image 715
Nathan Fellman Avatar asked Jan 24 '10 08:01

Nathan Fellman


2 Answers

use Math::BigInt

like image 189
mob Avatar answered Oct 27 '22 10:10

mob


If you only want to use big integers, you can use the bigint, which you can scope to a file:

 use bigint;

or just a limited scope:

 {
 use bigint;
 ...;
 }

If you need big floating point numbers as well as big integers, you can use the bignum pragma in the same way. Either way, these will slow down your program slightly (or significantly if you are doing a lot of math), so you should only use them for the parts where you really need them. However, faster isn't better than correct. :)

If you want very precise control over which numbers use the big* math, you can use the underlying classes that implement them and create objects yourself rather than applying the big* semantics to everything. Look that Math::Big* modules.

I talk about this more in the Benchmarking chapter of Mastering Perl since computers are too fast nowadays to use a factorial as a slow function, and we also added a section on big numbers it to the upcoming Effective Perl Programming, 2nd Edition.

like image 40
brian d foy Avatar answered Oct 27 '22 10:10

brian d foy