Well, as chipk said, that's pretty much how all the compilers work afaik.
Like App:

acker, pp and PerlApp really just create an archive that contains your copy of the Perl interpreter, all the modules and source codes that your Perl app uses, and bundles them together into an executable file that can stand on its own. On the first run, it extracts itself to a temporary directory and then runs a standard "perl sourcecode.pl" on the copy of perl.exe that it extracted to temp.
Apps compiled with pp, for instance, can be opened up in WinZip like a normal zip file, and browsed and extracted. AFAIK PerlApp does the same thing as pp, but automatically applies source code obfuscators (which pp can do as an option) so that if your code gets extracted from the binary, it'll be jumbled up and hard to decode unless you have a debugging version of Perl and really know what you're doing. Keeps the source code safe from the average prying eye, though.
I can't say how perl2exe does it but I imagine it follows the same pattern.
Having said that, a GUI application such as one that uses Perl Tk or wxPerl, will automatically be about 3 or 4 megabytes in size simply because they will need to bundle the entire Tk or wxPerl libraries inside themselves, respectively. They don't optimize the code like C or C++ do because Perl binaries aren't truly compiled into machine code.
-------------
Cuvou.com | My personal homepage
Project Fearless | My web blog