I think the current options are roughly as follows:
- Par::Packer - this packages your current Perl executable together with your script and all required modules and creates a single (large) binary. Ideally, you can just drop this binary somewhere and run it, but the drawback is that PAR still unpacks the files to a temp directory and runs them there. Depending on the target system and file creation permissions, this may be problematic.
- App::Staticperl - this compiles a custom Perl with all C and Perl dependencies included, which will then run your script from the same file. The drawback is that this is a shell script and needs a Linuxish environment to work.
- App::FatPacker - this packages your Perl script and all required (pure Perl) modules into one file that you can just use with whatever Perl is on the remote machine. Ideally, you can just drop this file somewhere and run it, but the drawback is that Perl and Perl modules needing C compilation will need to be installed on the target machine already.