There are two major changes that affected many projects, both done for security:
- 5.18 introduced more-randomized hashes. This shouldn't break any code, but some code only worked by chance of which order the hash keys landed normally, and will be broken now that they iterate in a different order on every run.
- 5.24 removed the current directory "." from the @INC include path. This breaks any project that used use MyModule; to mean require "./MyModule.pm";. You can still add the current directory back to @INC manually, but it's much better to organize the module directories and declare them all in perl -I ... or PERLLIB at startup.
Most of the rest tends to be stuff related to deprecating/removing old features from perl 4 or early versions of 5, or experimental features. If your Perl 5.16 code was written in a "normal" style, none of this should affect you.