Update: Argh! tye is right. My understanding of bignum was flawed - bignum doesn't work like most modules and even a detailed read of the documentation doesn't make that obvious. As tim.qfs points out in his reply changing where the 'use bignum;' statement is does alter the code generated at compile time.
But you still don't understand the compile/execute nature of Perl script execution and how that affects 'use' statements. All the use statements are executed before any of the script is executed (except where BEGIN blocks are used, but don't go there until you really know what you are doing). Moving the 'use' statements around does not affect the fact that modules loaded using 'use' are loaded before the script executes.
There are several ways to fix that. One way would be to put your sub in a module and have it do the number generation when loaded. Another way is to use require to load bignum. Best of all is to identify the nasty interaction and fix your code so that the presence of bignum doesn't matter. It would be interesting to know what the effect of bignum is on your code as that may point to a weakness in your code that will bite in other contexts.
If the code changes take longer than the time saved, it's fast enough already.