When using Perl based CGI on IIS you map the .cgi or .pl extension to the Perl executable. The mapping looks something along the lines of:
in reply to Need help with Perl in IIS setup
So you don't need the #! (or shebang) line. That is why on IIS you were having problems. Normally this is done for you when you install ActivePerl on Windows hence why you didn't see it.
Check out the ActivePerl docs to see it (assuming you are using ActivePerl of course!).
pathtoperl %s %s
This mapping is the same as for ASP, SSI (etc). There is a properties part of your web config inside IIS that configures each file extension for the server and tells it what to load against it. In the case of ASP, there are a host of dlls (etc) that IIS loads.
I suggest you read up on this as it is always good to have a closer idea of how your webserver handles your apps (and others).