More than 260 lines of code to implement a Sieve of Eratosthenes, especially in Perl, that seems to be totally out of proportion with the simplicity of the algorithm. Something must be wrong with your approach, but I don't feel like spending time decorticating your code to figure out, at least not right now, not enough time.
When I was an IT student (a number of years ago), I implemented it in Pascal or perhaps Modula II (or possibly ADA or even C), I don't remember exactly, in at least 4 or 5 times less code, although these languages are much more talkative than Perl. I am fairly sure I could easily do it, neat and clear, in no more than 25 lines of straight-forward Perl code without sacrificing clarity in the slightest manner. Really, your approach of the problem must be flawed. No time now to look at your code in details, but I'll come back to it if I do not forget.