|Keep It Simple, Stupid|
symbolic links to the rescue!
On your development machine, install your custom perl in /usr/local, then make /usr/bin/perl a symbolic link to /usr/local/bin/perl like this:
ln -s /usr/local/bin/perl /usr/bin/perl
Then you can use the same shebang on both development and production servers.
For modules, install everything into a local 'lib' directory, then use the line:
use lib '/path-to-lib/lib';
In all your scripts. Copy the lib directory to the production server, so that the scripts there will have access to the same libraries.
For anything else, try to use config files. For example, say you want "debug mode" to be active on the development server, and not active on the production server.
First create two files: dev-config.ini will contain the line:
DEBUG = 1
prod-config.ini will contain the line:
DEBUG = 0
Now create more symbolic links:
On the development server:
ln -s dev-config.ini config.ini
On the production server:
ln -s prod-config.ini config.ini
So your scripts only need to read "config.ini", but it's one thing on the dev side and another on the prod side. Once you read the config file, you can do things like this in your script:
The idea is to make each server look as much the same as possible, so that you can just tar/zip the entire app directory on the development server, ftp it to the production server, and then unzip/tar it and everything work. With a little effort up front, it's definitely possible, and it makes life much easier.