Just a short note so you don't fall in the trap I did. Don't do this:

sub pi { 2*atan2(1,0) } $circumference = 2*pi*$r;

If the subroutine is unprototyped, that's parsed as pi(*$r). A few modules may export constants as unprototyped functions, in which case you may have to write an empty pair of parenthesis after them to avoid ambiguity. Of course, the best way might be to use constant.