If you want to avoid use POSIX, floor is pretty easy:
sub floor { int($_[0]) - ( int($_[0]) > $_[0] ) }
There's also lots of floor/ceil/round/nearest type functionality in Math::Round that might be of interest:
http://search.cpan.org/~grommel/Math-Round-0.05/Round.pm
Matt